python matplotlib绘制折线、柱状图(简单版)
入门级简单的折线、柱状图绘制,代码粘贴即可使用、方便修改。其中,柱状图可以填充内容,比如.和/等。
简单折线
绘制一个算法加速比的折线图,横坐标是实验次数,纵坐标是加速比。
程序
import numpy as np
import matplotlib.pyplot as plt
y=[1.310,1.34,1.314,1.340,1.340,1.347,1.376,1.369,1.372]
x=range(1,10)
x_labels = range(1,10)
plt.plot(x,y,linewidth=3,color='black',marker='x',markersize=12)
font = {'family' : 'serif','weight': 'normal', 'size': 16}
plt.xlabel('Experiments Number',fontdict=font)
plt.ylabel('Accelerate Rate',fontdict=font)
plt.xlim(0,10)
plt.ylim(0,2)
plt.xticks(x,x_labels)
plt.show()
效果图
程序说明
plot(x,y) # 绘制x、y
plot(y) # 绘制y,用y数组的下标作为x 0...N-1
range(1,10) # 代表从1到10不包括10 [1,2,...,9]
plt.xlabel('...') # x轴标签
plt.xlabel('...',fontdict) # 设置标签以及字体
plt.xlim() # x轴范围
plt.xticks(x,x_labels) #x轴刻度以及显示的文本
多个折线
绘制多个折线,横坐标是聚类个数,纵坐标是算法耗时。
程序
import numpy as np
import matplotlib.pyplot as plt
y1=[0.6,1.5,3.1,3.3,5.7,6.2,7.4,8.3,9.6,11.64,12.18,12.64]
y2=[0.833,2.073,3.9,4.77,6.322,7.368,8.44,9.82,11.16,12.30,14.51,16.325]
y3=[0.495,2.85,4.47,6.23,7.80,9.61,10.96,12.72,14.646,16.70,18.33,19.52]
x1= range(2,47,4)
x_label = range(2,47,4)
plt.plot(x1,y1,label='D1',linewidth=1,color='black',marker='x', markerfacecolor='black',markersize=5)
plt.plot(x1,y2,label='D2',linewidth=1,color='black',marker='o', markerfacecolor='black',markersize=5)
plt.plot(x1,y3,label='D3',linewidth=1,color='black',marker='v', markerfacecolor='black',markersize=5)
font = {'family' : 'serif','weight': 'normal', 'size': 16}
plt.xlabel('Clusters Number',fontdict=font)
plt.ylabel('Time Consuming/s',fontdict=font)
plt.xlim(-2,50)
plt.ylim(0,25)
plt.xticks(x1,x_label)
plt.legend(loc='upper left')
plt.grid(True)
plt.show()
效果图
程序说明
plt.legend() #显示图例 loc = 'upper left'表示在左上方 默认在右上角
plt.grid(True) #显示网格
柱状图
一共三组实验,每组实验四组数据,即四个柱体。
程序
import numpy as np
import matplotlib.pyplot as plt
n_groups = 3
means_10_1 = (3.94,22.348,38.746)
means_10_2 = (3.436,18.022,30.373)
means_50_1 = (17.635,104.461,140.275)
means_50_2 = (14.212,84.27,110.547)
index = np.arange(n_groups)
print index
bar_width = 0.1
rects1 = plt.bar(index, means_10_1, bar_width,alpha=0.2, color='k',label='M k=10')
rects2 = plt.bar(index + bar_width, means_10_2, bar_width,color='w',label='P k=10',hatch='\\')
rects3 = plt.bar(index + 2*bar_width, means_50_1, bar_width,alpha=0.7,color='k',label='M k=50')
rects4 = plt.bar(index + 3*bar_width, means_50_2, bar_width,color='w',label='P k=50',hatch='.')
font = {'family' : 'serif','weight': 'normal', 'size': 16}
plt.xlabel('Dimensions',fontdict=font)
plt.ylabel('Time Consuming/s',fontdict=font)
plt.xticks(index + 2*bar_width, ('10', '50', '100'))
plt.ylim(0,160)
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()
效果图
程序说明
plot.bar(left,height,width) # left每一个柱形左侧x的坐标 画柱形的关键是计算坐标位置
plot.bar(...,hatch) # 柱形填充内容
arrage(3) # 生成list [0,1,2]
plt.tight_layout() # 紧凑显示图片,图片居中显示