美文网首页
【Python】绘制双Y坐标柱状图

【Python】绘制双Y坐标柱状图

作者: 吵吵人 | 来源:发表于2019-02-23 22:19 被阅读0次

原始数据截图,csv格式。


绘制程序

import numpy as np
import matplotlib.pyplot as plt

##-----读取数据----------   
data = open("E:/Draw/data.csv").readlines()
name=[]
VI=[]
VC=[]
for i in range (len(data)):
    data[i]=data[i].strip('\n').split(',')
    name.append(data[i][0])
    VI.append(eval(data[i][1]))
    VC.append(eval(data[i][2]))
    
##-----绘制右边柱子----------
##w是柱子的宽度
w=1
##生成绘图对象
fig = plt.figure()
##将画布划分成1行1列,在第一个方格中绘制
ax1 = fig.add_subplot(111)
##隐藏上边框
ax1.spines['top'].set_color('none')
##设置刻度范围
ax1.set_ylim(-max(VC),max(VC))
##设置x轴为下边框
ax1.xaxis.set_ticks_position('bottom')
##将x轴移动至0刻度处
ax1.spines['bottom'].set_position(('data',0))
##设置x轴的标签,3个单位长度间隔,和柱子间距一致
##ax1.set_xticks(np.arange(0,len(name)*3,3))
ax1.set_xticklabels(name,ha='left',fontsize=9)
##设置柱子间距
idx=np.arange(w,len(name)*3+w,3)
##生成柱状图,VI是数据列,width是柱子宽度
plt.bar(idx, VC,width = w,color='red')

##-----绘制左边柱子----------
##共享x坐标,这是关键
ax2 = ax1.twinx()
ax2.spines['bottom'].set_position(('data',0))
ax2.set_ylim(-max(VI),max(VI))
ax2.set_xticks(np.arange(0,len(name)*3,3))
ax2.set_xticklabels(name,ha='left',fontsize=9)

plt.bar(idx-w,VI,width = w)
plt.show()

绘制结果

疑问

  1. 因为共享X坐标,主坐标的X轴设置了之后次坐标再设置时才能够覆盖???
  2. 以上为了使X坐标标签左对齐蓝色柱子,从而使整体中央对齐,先绘制了红色柱子,再绘制的蓝色柱子,所以左Y轴对应红色,右Y轴对应蓝色,做法不对。或许应该是共享X轴绘制直方图而不是柱状图???
  3. 为什么label设置无效,无法显示图例???

相关文章

网友评论

      本文标题:【Python】绘制双Y坐标柱状图

      本文链接:https://www.haomeiwen.com/subject/ofsmyqtx.html