【问题标题】:plot bar graph using matplotlib.pyplot python使用 matplotlib.pyplot python 绘制条形图
【发布时间】:2018-10-10 16:05:19
【问题描述】:

我有一个这样的数据框:

A   B   C   D   E   F   index1
44544   44544   44544   44544   44544   44544   250
0   0   0   0   761 738 500
0   0   0   0   0   13  750
0   0   0   0   1   3   1000
0   0   0   0   10  11  1250
0   0   2   0   16219   8028    1500
0   0   12560   9649    102 222 1750
0   0   26406   23089   115 56  2000

现在我想使用 matplotlib 中的单选按钮绘制条形图。 我试过以下代码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import RadioButtons

df5=pd.read_excel(r'C:\YOIGO\hi.xlsx')

l1=df5.columns[0:6].tolist()
fig, ax = plt.subplots()
l,  = ax.plot(np.array(df5.index1), np.array(df5.iloc[:,2]), lw=2, color='red')
plt.subplots_adjust(left=0.3)

t=tuple(l1)
print(t)
axcolor = 'lightgoldenrodyellow'
rax = plt.axes([0.05, 0.7, 0.15, 0.15], facecolor=axcolor)
radio = RadioButtons(rax, t)
d={}
for x in t:
    d[x]=np.array(df5[x])


def hzfunc(label):
    hzdict = d
    ydata = hzdict[label]
    l.set_ydata(ydata)
    plt.draw()
radio.on_clicked(hzfunc)
plt.show()

但上面的代码给了我普通图而不是条形图。 我可以知道如何将其转换为条形图吗??

【问题讨论】:

  • ax.bar(...) 代替 ax.plot(...) 怎么样?

标签: python python-3.x matplotlib


【解决方案1】:

您的问题是,当您想使用 plt.bar() 创建条形图时,您使用的是用于绘制线图的 plt.plot()

但是,plot()bar() 分别返回不同的对象 Line2DBarCollection。因此,您需要更改回调函数中的逻辑:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import RadioButtons

d = """A   B   C   D   E   F   index1
44544   44544   44544   44544   44544   44544   250
0   0   0   0   761 738 500
0   0   0   0   0   13  750
0   0   0   0   1   3   1000
0   0   0   0   10  11  1250
0   0   2   0   16219   8028    1500
0   0   12560   9649    102 222 1750
0   0   26406   23089   115 56  2000
"""
df5=pd.read_table(StringIO(d), sep='\s+')

fig, ax = plt.subplots()
bars = ax.bar(np.array(df5.index1), height=np.array(df5['A']), color='red', width=200)
plt.subplots_adjust(left=0.3)

axcolor = 'lightgoldenrodyellow'
rax = plt.axes([0.05, 0.7, 0.15, 0.15], facecolor=axcolor)
radio = RadioButtons(rax, df5.columns[:-1])


def hzfunc(label):
    ydata = df5[label]
    for b,y in zip(bars,ydata):
        b.set_height(y)
    plt.draw()
radio.on_clicked(hzfunc)

【讨论】:

  • 嗨 Asashi,感谢您的解决方案。这就是我想要的输出。但我有另一个查询注册这个。如何将 df5[A] 的所有值显示在 x 轴及其相应的条形值上?你能帮我解决这个问题吗?因为我有 41 行 df5[A] 并且没有显示在轴上。
  • 我建议您提出一个新问题,提供 df5['A'] 的完整数据集。具体参考How to make good reproducible pandas examples
猜你喜欢
  • 2017-03-12
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2015-11-07
相关资源
最近更新 更多