matplotlib画图-折线/散点/柱状/条形图

本文详细介绍了使用Matplotlib库绘制各种图表的方法,包括折线图、散点图、柱状图和条形图等。涵盖了如何设置图表样式、颜色、标记、线型,以及如何处理大量日期数据和创建复杂图表布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 折线图

【绘图】:
plt.plot(x,y):x,y的位置

绘制两个折线,并设置不同样式:
plt.plot([位置1],1,'样式1', [位置2],2,'样式2')
或者,重复:
plt.plot(x,y1)
plt.plot(x,y2)

【参数】:
plt.plot(
	位置序列, 		位置序列可以省略,默认为0,1,2...
	数据序列, 
	marker, 		数据标记,默认圆形
	linstyle, 		线性,默认实线
	color, 			颜色
	style,			颜色标记线型可简写,与marker linstyle color不相容,顺序不可变
	markersize, 	标记大小
	linewidth,		线宽
	drawstyle=''	设置非实际数据点的插值方式,默认线性插值(直接
					连),'steps=post'为阶梯式
	label,			该条线标签,与plt.legend()同时使用,传入'nolegend'表示除去该图例
	)


【颜色、标记、线形】
1 marker
常见数据标记:
o:圆形   s 方形   p 五角星				v '1'     <  '3'
D 菱形   d 菱形   h 六角形 				^ '2'     >  '4'
* 星型   + 加号   x x型  H 六角形        .

2 linstyle
- 直线	-- 虚线		-. -. 		: 细小虚线

3 color
c-青色  g-绿  y:黄色  m-品红  b-蓝色  k:黑色  w:白色

4 颜色、标记、线型的简单表示:
plt.plot(位置序列,数据序列,'bo-')  带蓝色圆点的直线,顺序:颜色、标记、线形
'g^' 绿色^标记的散点图		'r--'红色虚线折线图

日期数据较多,x轴标签显示重叠

plt.plot_date(x,y,xdate=,ydate=)
可绘制折线图和散点图,柱形图如果x轴的标签显示重叠可以变为条形图
d = pd.DataFrame(np.random.rand(100)+np.random.randint(20,80,100), index=pd.period_range('1980-01',freq='M',periods=100),columns=[u'降雨量']).reset_index()
d.rename(columns={'index':u'时间'}, inplace=True)
d.head()
	时间	降雨量
0	1980-01	56.414361
1	1980-02	42.404928
2	1980-03	68.200190
3	1980-04	23.079409
4	1980-05	38.859220

plt.figure(figsize=(10,4))
plt.plot_date(d['时间'],d['降雨量'],'b-',xdate=True,alpha=0.8,linewidth=0.5)
plt.ylabel(u'降雨量')
plt.xticks(rotation=20)
plt.show()

在这里插入图片描述

2 绘制散点图

plt.scatter(
	x_values, y_values, 		值
	s, 							点的大小
	c=字符串/映射关联列,			颜色,颜色字符串或关联列,此时表示颜色映射的索引位置
	cmap=plt.cm.Blues, 			颜色映射类型,或简写cmap='Blues',但必须设置c的顺序数
	marker, 					点类型
	edgecolor					点的轮廓颜色,'none'可将轮廓删除
)

显示两组,并设置不同组的样式:
plt.scatter(x1, x2, marker='h', s=1, c='k')
plt.scatter(x1, x3, marker='s', s=1, c='r')

根据值的大小设置大小:
plt.scatter(x1, x2, s=x2):大小为x2大小,或x2*0.1如果值太大

颜色条

a = [np.random.randint(0,5)]  # 初始设定的值
for i in range(499):  # 500次随机漫步
    a = np.append(a,a[-1]+np.random.choice([-1,1]))
    
plt.figure(figsize=(6,4))
s = np.random.randint(1,50,500)
plt.scatter(
    range(500),a,
    s=s,c=s, cmap=plt.cm.cool, alpha=0.8, edgecolor='white'
)
plt.colorbar()

在这里插入图片描述

3 柱状/条形图

【柱状图】
plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

left 			每一条的顺序值,左下角位置
height 			每一条的具体值
width  			条的宽度
bottom 			可以为条形图的每个条形添加基准线,默认为0
color			填充颜色
edgecolor 		边缘颜色
linewidth 		边缘宽度
alpha 			设置柱状填充颜色的透明度 大于0 小于等于1
tick_label 		刻度标签
label 			图例
xerr/yerr		单个数或序列   显示误差棒,横向条形图/纵向条形图
align 			{‘center’, ‘edge’}对齐方式,设置plt.xticks()函数中的标签的位置
orientation     设置条形图的摆放方向,默认为垂直方向{‘vertical’, ‘horizontal’}
log             是否需要对绘图数据进行log变换

【条形图】
plt.barh(位置, 长度, orientation='horizontal')

【分离式条形图】
plt.broken_barh(xranges , yranges , facecolors, label):绘制一个条

xranges:该条位置x范围(xmin,xwidth)注意是长度不是最大值
yranges:该条位置y范围(ymin,ywidth)
facecolors:
label

1 分组柱状图

a = [12,24,35,43,56,57,30,20]
b = [10,25,38,45,54,60,24,17]
plt.figure(figsize=(6,4))
width = 0.3
plt.bar(np.array(range(8))-width/2, a,color='red',alpha=0.5,label=u'男',width=width)
plt.bar(np.array(range(8))+width/2, b,color='blue',alpha=0.3, label=u'女',width=width)
# 加数据标签(标签位置以其左边为准)
for i, v in enumerate(a):
    plt.annotate(v, (i-width, v+0.2))
for i, v in enumerate(b):
    plt.annotate(v, (i, v+0.2))
# 加轴刻度标签
plt.xticks(range(8), [u'18岁以下','18-25','26-30','31-40','41-50','51-60','61-70',u'71及以上'])
plt.title(u'xx国xx年人口年龄分布')
plt.ylabel(u'万人', rotation='horizontal',y=1)
plt.legend()

在这里插入图片描述
2 堆积条形图

data = np.array(
    [[60,30,5,5],
    [59,32,6,3],
    [58,32,7,3],
    [56,30,8,6],
    [54,29,10,7],
     [52,28,13,7],
     [51,28,15,6],
     [50,26,18,6],
    ]
)
fig = plt.figure(figsize=(6,4))

for i,c,label in zip(range(len(data)), [ 'blue','teal', 'navy', 'purple'], ['煤', '石油', '天然气', '其它']):
    plt.bar(range(data.shape[0]), data[:,i], width=0.5,
            bottom=np.sum(data[:,:i], axis=1),  # axis=1计算每行和,累计
            color=c, alpha=0.5, label=label
           )
plt.xlabel(u'年份', fontsize=10)
plt.ylabel(u'消耗比例(%)', fontsize=10)
plt.xticks(range(len(data)), [2010,2011,2012,2013,2014,2015,2016,2017], fontsize=10)

plt.plot(range(len(data)), data[:,0],label=u'煤消耗比例',color='black')
plt.legend(loc='upper right')

在这里插入图片描述
3 条形图

data = np.array(
    [[60,30,5,5],
    [59,32,6,3],
    [58,32,7,3],
    [56,30,8,6],
    [54,29,10,7],
     [52,28,13,7],
     [51,28,15,6],
     [50,26,18,6],
    ]
)
fig = plt.figure(figsize=(6,4))
for i,c,label in zip(range(len(data)), [ 'black','teal', 'navy', 'purple'], ['煤', '石油', '天然气', '其它']):
    plt.barh(range(data.shape[0]), data[:,i],
            left=np.sum(data[:,:i], axis=1),  # axis=1计算每行和,累计
            color=c, alpha=0.5, label=label,orientation='horizontal',
           )
plt.ylabel(u'年份', fontsize=10,rotation='horizontal',y=0)
plt.xlabel(u'消耗比例(%)', fontsize=10,loc='right')
plt.yticks(range(len(data)), [2010,2011,2012,2013,2014,2015,2016,2017], fontsize=10)
plt.legend(bbox_to_anchor=(1,1))

plt.savefig(r'C:\Users\aa\Desktop\b.png',dpi=300,bbox_inches='tight')  # 保存全部的图片

在这里插入图片描述

4 分离式条形图

fig, ax = plt.subplots()
ax.broken_barh([(1, 45), (55, 45), (120, 45), (175, 45)], (5, 10), facecolors='blue')
ax.broken_barh([(45, 10), (100, 20), (165, 10)], (25,10), facecolors=('green', 'orange', 'red'))
ax.set_xlim(0, 250)
ax.set_ylim(0, 40)
ax.set_yticks([10, 30])
ax.set_yticklabels(['class', 'break'])
ax.set_xticks([1, 45, 55, 100, 120, 165, 175, 220])
ax.set_xticklabels(['8:00','8:45','8:55','9:40','10:00','10:45','10:55','11:40'],rotation=40)
ax.set_xlabel('time'),
ax.grid(True, axis='x')
 # 添加文字注释
ax.annotate('first break', (40, 30), (40, 36))
ax.annotate('second break', (90, 30), (90, 36))
ax.annotate('third break', (165, 30), (165, 36))
ax.annotate('English', (25, 10), (25, 3))
ax.annotate('Math', (80, 10), (80, 3))
ax.annotate('Music', (130, 10), (130, 3))
ax.annotate('PE', (200, 10), (200, 3))
 # 带箭头注释
ax.annotate('longer break', (120, 30), (150, 20),
            arrowprops=dict(facecolor='black', shrink=0.2),
            fontsize=12)
plt.title(u'课程时间表', fontsize=18)
plt.show()

在这里插入图片描述

### 使用 `git` 命令远程仓库拉取代码 为了从远程仓库获取最新的提交记录而不立即合并这些更改到当前分支,可以使用 `fetch` 命令。此方法会将所有的最新提交下载并导入至对应的远程分支中,而不会自动更新工作区中的任何文件[^1]。 对于希望查看已获取的远程分支列表及其状态,可以通过执行如下命令实现: ```bash git branch -av ``` 当开发者确认想要把远端修改集成进来之后,则可以选择手动合并或者变基操作来完成这一过程。例如,在准备接收来自其他贡献者的改动前,先切换回目标分支(通常是主干),再决定采用何种方式同步数据[^5]。 如果需要更简便的操作流程,即一次性完成抓取加合并的动作,那么可以直接利用 `pull` 来代替上述两步动作组合。需要注意的是,默认情况下它等于执行了一次 `fetch` 加上一次基于快速前进策略或是三路合并模式下的 `merge`;而在某些配置下也可能触发 `rebase` 行为[^2]。 #### 示例:通过 Fetch 获取远程更新但不应用 假设有一个名为 origin 的默认上游库连接设置好了,下面是如何仅提取其上的变动作为参考之用的方法: ```bash # 切换到你想比较或后续要融合变更的目标分支 git checkout main # 执行 fetch 动作以获得最新的元数据和对象 git fetch origin # 查看所有分支的状态,包括刚刚被刷新过的远程跟踪分支 git branch -av ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值