matplotlib绘图工具笔记
python中有许多非常方便的可视化工具,例如matplotlib,seaborn等。在这里主要总结matplotlib的简单绘图方法。
设置图形的大小和中文显示,图片保存
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #中文表示
plt.rcParams['axes.unicode_minus']=False
#设置图形大小
plt.figure(figsize=(10,6),dpi=80) #dpi是设置像素
plt.savefig('./pic1.png') #写下保存路径
插入代码:Ctrl/Command + Shift + K
- 绘制折线图
#绘制2小时的气温
import random
y=[random.randint(20,35) for i in range(120)]
x=range(120)
plt.figure(figsize=(12,8))
plt.plot(x,y)
# 设置x轴刻度,数字和字符串一一对应,一样长
_x=list(x)
_xtick_labels=["10点{}分".format(i) for i in range(60)]
_xtick_labels+=["11点{}分".format(i-60) for i in range(60,120)]
plt.xticks(_x[::10],_xtick_labels[::10],rotation=75) # rotation=90 旋转90度
- 绘制散点图
#绘制3月份和10月份的气温散点图
a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,
16,17,20,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,
22,15,11,15,5,13,17,10,11,13,12,13,6]
#设置x轴刻度
x_a=range(1,32) #3月1-31日
x_b=range(32,63)
_x_=list(x_a)+list(x_b)
_xtick_labels=["3月{}日".format(i) for i in range(1,32)]
_xtick_labels+=["10月{}日".format(i-30) for i in range(32,63)]
plt.figure(figsize=(10,6))
plt.scatter(x_a,a,label='3月')
plt.scatter(x_b,b,label='10月')
plt.xticks(_x_[::5],_xtick_labels[::5],rotation=45)
plt.xlabel("日期")
plt.ylabel("气温")
#设置图例,默认会选择合适的地方,也可自主设置,此处设置为左上
plt.legend(loc="upper left")
- 绘制条形图
注意条形图与直方图的区别。条形图用于分类数据,不连续数值。直方图用于连续型数据。
#绘制多个条形图
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
x_14=list(range(len(a)))
x_15=list(i+0.2 for i in range(len(a)))
x_16=list(i+0.4 for i in range(len(a)))
plt.bar(range(len(a)),b_14,width=0.2,label='14日票房')
plt.bar(x_15,b_15,width=0.2,label='15日票房')
plt.bar(x_16,b_16,width=0.2,label='16日票房')
plt.legend()
plt.xticks(x_15,a)
- 绘制直方图
注意直方图用于未统计分组过的原始数据。
#数据为a,是电影时长
plt.figure(figsize=(10,6))
d=6 #设置步长,该处影响grid设置是否和直方重合,数据个数整除则重合
num_bins=(max(a)-min(a))//d
plt.hist(a,bins=num_bins,color='g')
plt.grid()
plt.xticks(range(min(a),max(a)+d,d))
plt.xlabel("个数")
plt.ylabel("数量")
plt.title("电影时长")
8. 条形图调整成为直方图
#绘制多个条形图,plt多次plot即可
#以下已经分组过的数据可先绘制条形图
interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
#先绘制出条形图,再通过调整条形的大小变成直方图
plt.bar(range(len(width)),quantity,width=1)
#设置x轴刻度
_x=[i-0.5 for i in range(len(width)+1)] #调整条形的大小,左移0.5
_xtick_labels=interval+[150]
plt.xticks(_x,_xtick_labels)
plt.grid()
<最後の一言>
绘制图形本身很简单,难点在于x轴刻度的设置。
绘制过程中也可随时查看官方文档。
url: http://matplotlib.org/gallery/index.html