import matplotlib.pyplot as plt
或者
from matplotlib import pyplot as plt
x = [0,1,2,3,4] # x 轴数据
y = [0,1,2,3,4] # y 轴数据
plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例
plt.title('图表标题')
plt.xlabel('x轴名称')
plt.ylabel('y轴名称')
plt.grid() # 按需显示网格
plt.plot(x,y) # 绘制
plt.show() # 显示图像,Jupyter Notebook里面不加这行也会显示!
比如在plot时添加:
plt.plot(x,y,marker='.',markersize=10,color='red',linewidth=4,markeredgecolor='black')
关键字 | 作用 |
---|---|
marker |
把(x,y)的数据标出来,. 代表用实心圆标记,还可以使用+ ,* ,^ 等。 |
markersize |
调整marker的大小。 |
markeredgecolor |
给marker加上指定颜色的边框。 |
color |
改变线段颜色。 |
linewidth |
改变线段粗细。 |
linestyle |
- 代表实线,-- 代表虚线。 |
label |
给多线图添加图例,详见补充2。 |
快捷输入:
plt.plot(x,y,'r.-') # 格式color marker linestyle
# 等同于:
plt.plot(x,y,color='red',marker='.',linestyle='-')
对此感兴趣的同学可以访问 “pythonic生物人” 写的自定义marker/linestyle:https://www.jianshu.com/p/7543b925bdb8
# x,y数据同上
new_y = [0,0.5,3,2,6] # 新的 y 轴数据
# 为了区分两组数据我们需要添加两条线的图例,只需要在plot的时候添加label关键字
plt.plot(x,y,label='original') # 画原始x,y
plt.plot(x,new_y, label='new') # 画新的x,y
plt.fill_between(x,new_y,alpha=0.2) #为了区分两条线,可以给其中一条画阴影!
plt.legend() # 显示图例,可以使用plt.legend(loc=(0,0))调整图例位置
plt.show() # 只要一个show就可以把图画在一起了!
要显示中文图例可别忘了下面这行噢!
plt.rcParams['font.sans-serif'] = ['SimHei']
对阴影面积进行处理:
plt.fill_between(x,new_y,overall_mid,where=(x <= overall_mid),interpolate=True,alpha = 0.2,color='red')
plt.plot(x,y)
plt.style.use('seaborn-paper') # 使用内置风格
plt.show()
'Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10'
动漫风格直接添加下行:(无法显示中文字体)
plt.xkcd()
fig, (ax1,ax2,ax3) = plt.subplots(nrows=3,ncols=1,sharex=True,sharey=True) # nrows=行数,ncols=列数
ax1.plot(x,y)
ax2.plot(x,new_y)
ax3.plot(x,y)
plt.savefig('图片名字.png')
x = [5, 7, 8, 5, 6, 7, 9, 2, 3, 4, 4, 4, 2, 6, 3, 6, 8, 6, 4, 1]
y = [7, 4, 3, 9, 1, 3, 2, 5, 2, 4, 8, 7, 1, 6, 4, 9, 7, 7, 5, 1]
plt.scatter(x,y,s=100,c='red',edgecolor='black',linewidth=1,alpha=0.25) # s=大小, c=颜色, edgecolor=边框颜色, linewidth=边框粗细, alpha=不透明度
plt.grid()
plt.show()
# 根据color list大小区分颜色
colors = [7, 5, 9, 7, 5, 7, 2, 5, 3, 7, 1, 2, 8, 1, 9, 2, 5, 6, 7, 5]
# 根据size list区分颜色
sizes = [209, 486, 381, 255, 191, 315, 185, 228, 174, 538, 239, 394, 399, 153, 273, 293, 436, 501, 397, 539]
# 画图
plt.scatter(x,y,s=sizes,c=colors,edgecolor='black',linewidth=1,alpha=0.95)
plt.grid()
# 添加color bar
cbar = plt.colorbar()
cbar.set_label('Label')
标题/坐标轴名称/grid等同理折线图。
柱状图分为:
plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例
# 输入数据
menu = ['西湖醋鱼','宫保鸡丁', '松鼠桂鱼', '东坡肉', '酸菜鱼']
popularity = [15,10,13,25,23]
# 绘制图像
plt.bar(menu,popularity)
plt.xticks(rotation=45) # 旋转x轴类名45°,y轴同理
plt.show()
plt.barh(menu,popularity)
plt.show()
ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55] # 数据列表
bins=[20,30,40,50,60] # 分类
plt.hist(ages,edgecolor='black',bins=bins)
#添加辅助线
median_age= 29
plt.axvline(median_age,color='red',label = 'Median')
plt.legend()
标题/坐标轴名称/grid等同理折线图。
menu = ['西湖醋鱼','宫保鸡丁', '松鼠桂鱼', '东坡肉', '酸菜鱼']
popularity = [15,10,13,25,23]
plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例
plt.pie(popularity,labels=menu)
plt.show()
# 使第四个菜“东坡肉”显示爆炸效果
explo = [0,0,0,0.1,0] # 数值为远近程度
plt.pie(popularity,labels=menu,explode=explo,shadow=True,startangle=0,autopct='%1.2f%%',wedgeprops={'edgecolor':'black'})
plt.show()
关键字 | 作用 |
---|---|
shadow=True |
使饼图添加阴影效果,变得立体。 |
startangle=0 |
调整起始角度,旋转饼图。 |
autopct='%1.2f%%' |
使饼图显示两位小数的占比。 |
wedgeprops={'edgecolor':'black'} |
设置边框颜色为黑色。 |
当需要在手机端或者多平台访问则需要:
plt.tight_layout()
menu = ['西湖醋鱼','宫保鸡丁', '松鼠桂鱼', '东坡肉', '酸菜鱼']
popularity = [15,10,13,25,23] # 店内点餐人数
take_out_popularity = [0,3,7,35,50] # 外卖点餐人数
plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例
plt.bar(menu, popularity, label='店内点餐人数')
plt.bar(menu, take_out_popularity, bottom=popularity, label='外卖点餐人数')
label=['店内点餐人数','外卖点餐人数']
plt.stackplot(menu,popularity,take_out_popularity,labels=label)
plt.legend()