Matplotlib条形图

hk8txs48  于 2023-01-21  发布在  其他
关注(0)|答案(3)|浏览(201)

下面是我的数据结构:

data = {'2013': {1:25,2:81,3:15}, '2014': {1:28, 2:65, 3:75}, '2015': {1:78,2:91,3:86 }}

我的x轴是数字[1,2,3]
y轴是每个数字的数量。例如:2013年,x轴为1,其数量为25
打印每年的每个图表
我想绘制一个条形图,它使用matplotlib和图例。

qyswt5oh

qyswt5oh1#

import matplotlib.pyplot as plt
import pandas as pd

data = {'2013': {1:25,2:81,3:15}, '2014': {1:28, 2:65, 3:75}, '2015': {1:78,2:91,3:86 }}

df = pd.DataFrame(data)

df.plot(kind='bar')

plt.show()

我喜欢Pandas,因为它不需要对数据做任何操作就可以获取数据并绘制出来。

0sgqnhkj

0sgqnhkj2#

您可以通过dict.keys()访问字典的键,通过dict.values()访问字典的值
如果你想绘制2013年的数据,你可以这样做:

import matplotlib.pyplot as pl
x_13 = data['2013'].keys()
y_13 = data['2013'].values()
pl.bar(x_13, y_13, label = '2013')
pl.legend()

这样就可以了。更优雅的是,do可以简单地do:

year = '2013'
pl.bar(data[year].keys(), data[year].values(), label=year)

这样你就可以循环播放了

for year in ['2013','2014','2015']:
    pl.bar(data[year].keys(), data[year].values(), label=year)
c7rzv4ha

c7rzv4ha3#

你可以用几种方法来做到这一点。

使用bar()的 * 函数 * 方式:

data = {'2013': {1: 25, 2: 81, 3: 15}, '2014': {1: 28, 2: 65, 3: 75}, '2015': {1: 78, 2: 91, 3: 86}}

df = pd.DataFrame(data)

X_axis = np.arange(len(df))

plt.bar(X_axis - 0.1,height=df["2013"], label='2013',width=.1)
plt.bar(X_axis, height=df["2014"], label='2014',width=.1)
plt.bar(X_axis + 0.1, height=df["2015"], label='2015',width=.1)
plt.legend()
plt.show()

更多信息here

使用figure()的 * 面向对象 * 方式:

data = {'2013': {1: 25, 2: 81, 3: 15}, '2014': {1: 28, 2: 65, 3: 75}, '2015': {1: 78, 2: 91, 3: 86}}

df = pd.DataFrame(data)

fig= plt.figure()

axes = fig.add_axes([.1,.1,.8,.8])

X_axis = np.arange(len(df))
axes.bar(X_axis -.25,df["2013"], color ='b', width=.25)
axes.bar(X_axis,df["2014"], color ='r', width=.25)
axes.bar(X_axis +.25,df["2015"], color ='g', width=.25)

相关问题