简体   繁体   English

如何从列表创建分组条形图

[英]How to create a grouped bar plot from lists

  • I'm attempting to plot a bar plot, which compares the number of several items in 2 different cases.我试图绘制一个条形图,它比较了两种不同情况下的几个项目的数量。
  • The desired output would be a bar plot with 4+4 = 8 bars, next to to each other which indicates the number of each type for each case.所需的输出将是带有 4+4 = 8 个条形的条形图,它们彼此相邻,指示每种情况下每种类型的数量。
  • This is the initial code which I wrote, it is not giving what I expect.这是我写的初始代码,它没有给出我的期望。 How can I modify this?我该如何修改?
import numpy
import matplotlib.pyplot as plt

names = ["a","b","c","d"]
case1 = [5,7,5,6]
case2 = [7,4,8,5]

plt.hist(case1)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt

names = ["a","b","c","d"]
case1 = [5,7,5,6]
case2 = [7,4,8,5]

# create the dataframe
df = pd.DataFrame({'c1': case1, 'c2': case2}, index=names)

# display(df)
   c1  c2
a   5   7
b   7   4
c   5   8
d   6   5

# plot
ax = df.plot(kind='bar', figsize=(6, 4), rot=0, title='Case Comparison', ylabel='Values')
plt.show()

在此处输入图片说明

  • Try the following for python 2.7python 2.7尝试以下操作
fig, ax = plt.subplots(figsize=(6, 4))
df.plot.bar(ax=ax, rot=0)
ax.set(ylabel='Values')
plt.show()

It can be achieved by adapting this code to your problem.可以通过使此代码适应您的问题来实现。

# importing pandas library
import pandas as pd
# import matplotlib library
import matplotlib.pyplot as plt
  
# creating dataframe
df = pd.DataFrame({
    'Names': ["a","b","c","d"],
    'Case1': [5,7,5,6],
    'Case2': [7,4,8,5]
})
  
# plotting graph
df.plot(x="Names", y=["Case1", "Case2"], kind="bar")

Matplotlib only (plus numpy.arange ).仅 Matplotlib(加上numpy.arange )。

It's easy to place correctly the bar groups if you think about it.如果您考虑一下,很容易正确放置酒吧组。

在此处输入图片说明

import matplotlib.pyplot as plt
from numpy import arange

places = ["Nujiang Lisu","Chuxiong Yi","Liangshan Yi","Dehong Dai & Jingpo"]
animals = ['Pandas', 'Snow Leopards']

n_places = len(places)
n_animals = len(animals)

animals_in_place = [[5,7,5,6],[7,4,8,5]]

### prepare for grouping the bars    
total_width = 0.5 # 0 ≤ total_width ≤ 1
d = 0.1 # gap between bars, as a fraction of the bar width, 0 ≤ d ≤ ∞
width = total_width/(n_animals+(n_animals-1)*d)
offset = -total_width/2

### plot    
x = arange(n_places)
fig, ax = plt.subplots()
for animal, data in zip(animals, animals_in_place):
    ax.bar(x+offset, data, width, align='edge', label=animal)
    offset += (1+d)*width
ax.set_xticks(x) ; ax.set_xticklabels(places)
fig.legend()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM