matplotlib绘制仅有y轴的数值条码图/台阶图
- 图形来源
- 图形绘制思路
- 绘图代码
图形来源
今天看文章,文章中有一幅图,图的表达形式很适合我目前的数据展示,于是想要用python画出来。
文章来源:Yun-Hua Cheng_2017_Scientific Reports_An extended cluster expansion for ground states of heterofullerenes
图形绘制思路
由于只关注纵坐标的数值大小,不再考虑y与x的关系,因此实际上就是每一个y值都使用一条横线表示,从绘图的角度,最简单的方法就是绘制两个坐标点,这两个坐标点y值相同,x值不同,使用线连接两个点便是一条横线。所以思路很简单:
1. 获取纵坐标数值列表;
2. 使用for循环遍历该列表,创建两个坐标点,该坐标点的y值相同,x值不同;然后使用plt.plot()对这两个坐标点绘图;
3. 遍历绘图后,隐藏上、下、右的坐标轴,便得到仅含有y轴的数值条码图;
绘图代码
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
matplotlib.use('Agg')
##图形设置
plt.rcParams['figure.figsize']=(2,6)
plt.rcParams['savefig.dpi'] = 300 #图片像素
plt.rcParams['figure.dpi'] = 300 #分辨率
plt.rcParams['font.sans-serif']=['Arial']
#数据导入
#绘制数值条码图
y=[1,2,3,4,5,6,6.1,6.2,6.3,7,8,15,15.1,15.2,15.3]
#遍历纵坐标数值,每个数值画一条横线,所以相当于每一个值画一个图
for i in y:
x=[0.5,0.8]
y=[i,i]
plt.plot(x,y,color='tab:orange')
ax = plt.gca()
ax.axes.xaxis.set_ticks([])#不显示x轴刻度
ax.spines['top'].set_visible(False)#隐藏上、下、右的图框
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
labels = ax.get_xticklabels() + ax.get_yticklabels()#设置刻度值的字体、大小
[label.set_fontname('Arial') for label in labels]
font1 = {'family' : 'Arial',
'weight' : 'normal',
'size' : 18,}
plt.ylabel('y',font1)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.tick_params(axis='both',width=1,length=5)#设置刻度线的长度
plt.savefig('plot_step.png',bbox_inches = 'tight')#保存图片
【图形结果】