如何在matplotlib中绘制多个条形图,当我试图多次调用条形函数时,它们重叠,如下图所示,红色的最高值只能看到.如何在x轴上绘制带有日期的多个条形图?
到目前为止,我试过这个:
import matplotlib.pyplot as plt
import datetime
x = [
datetime.datetime(2011, 1, 4, 0, 0),
datetime.datetime(2011, 1, 5, 0, 0),
datetime.datetime(2011, 1, 6, 0, 0)
]
y = [4, 9, 2]
z = [1, 2, 3]
k = [11, 12, 13]
ax = plt.subplot(111)
ax.bar(x, y, width=0.5, color='b', align='center')
ax.bar(x, z, width=0.5, color='g', align='center')
ax.bar(x, k, width=0.5, color='r', align='center')
ax.xaxis_date()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我懂了:

结果应该是这样的,但是日期在x轴上,并且柱子彼此相邻:

我有一个字符串列表:
a = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e']
Run Code Online (Sandbox Code Playgroud)
我想制作一个直方图来显示字母的频率分布.我可以使用以下代码创建一个包含每个字母数的列表:
from itertools import groupby
b = [len(list(group)) for key, group in groupby(a)]
Run Code Online (Sandbox Code Playgroud)
如何制作直方图?我可能在列表中有一百万个这样的元素a.
鉴于以下计数图,我如何将百分比放在栏杆上?
import seaborn as sns
sns.set(style="darkgrid")
titanic = sns.load_dataset("titanic")
ax = sns.countplot(x="class", hue="who", data=titanic)
Run Code Online (Sandbox Code Playgroud)
例如,对于"第一",我想要总的第一人/总第一,总第一女人/总第一,总第一个孩子/总第一个在他们各自的酒吧之上.
如果我的解释不清楚,请告诉我.
谢谢!
我想看看如何在Seaborn中做两件事,使用条形图来显示数据框中的值,但不在图表中
1)我想在绘制另一个字段时显示数据框中一个字段的值.例如,下面,我正在绘制'tip',但我想将'total_bill'的值置于每个柱的中心位置(即星期五上方325.88,星期六上方1778.40等)
2)有没有办法缩放条形的颜色,最小值'total_bill'具有最亮的颜色(在本例中为星期五),最高值'total_bill'具有最暗颜色.显然,当我进行缩放时,我会坚持使用一种颜色(即蓝色).
谢谢!我确信这很容易,但我很想念它..
虽然我看到其他人认为这是另一个问题(或两个)的重复,但我错过了如何使用图中没有的值作为标签或阴影的基础的部分.怎么说,用total_bill作为基础.对不起,我根据这些答案无法弄明白.
从以下代码开始,
import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata- book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
g=sns.barplot(x='day',y='tip',data=groupedvalues)
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
临时解决方案:
for index, row in groupedvalues.iterrows():
g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
Run Code Online (Sandbox Code Playgroud)
在着色上,使用下面的示例,我尝试了以下内容:
import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
pal = sns.color_palette("Greens_d", len(data))
rank = groupedvalues.argsort().argsort()
g=sns.barplot(x='day',y='tip',data=groupedvalues)
for index, row in groupedvalues.iterrows():
g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误:
AttributeError:'DataFrame'对象没有属性'argsort'
所以我尝试了修改:
import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',') …Run Code Online (Sandbox Code Playgroud) 我需要重新创建一个类似于下面在Excel中创建的图表.我希望使用matplotlib,但似乎无法找到任何关于如何做这样的图表的例子或参考.我需要根据性能阈值对条形进行着色,并显示阈值.谁能指出我正确的方向?不过,我确实需要能够用Python做到这一点.
我有这个图:
我想在每列上面写上计数.这些值位于第一个和第二个列表中.你能帮我解决这个问题吗?我尝试了一些没有成功的事
这是图表的代码:
countListFast = [1492.0, 497.0, 441.0, 218.0, 101.0, 78.0, 103.0]
countListSlow = [1718.0, 806.0, 850.0, 397.0, 182.0, 125.0, 106.0]
errorRateListOfFast = ['9.09', '9.09', '9.38', '9.40', '7.89', '8.02', '10.00']
errorRateListOfSlow = ['10.00', '13.04', '14.29', '12.50', '14.29', '14.53', '11.11']
opacity = 0.4
bar_width = 0.35
plt.xlabel('Tasks')
plt.ylabel('Error Rate')
plt.xticks(range(len(errorRateListOfFast)),('[10-20)', '[20-30)', '[30-50)', '[50-70)','[70-90)', '[90-120)', ' [120 < )'), rotation=30)
plt.bar(np.arange(len(errorRateListOfFast))+ bar_width, errorRateListOfFast, bar_width, align='center', alpha=opacity, color='b', label='Fast <= 6 sec.')
plt.bar(range(len(errorRateListOfSlow)), errorRateListOfSlow, bar_width, align='center', alpha=opacity, color='r', label='Slower > 6 sec.')
plt.legend() …Run Code Online (Sandbox Code Playgroud) 我试图在matplotlib中复制以下图像,似乎是我唯一的选择.虽然看起来你不能堆叠barh图,所以我不知道该怎么做

如果你知道一个更好的python库来绘制这种东西,请告诉我.
这就是我可以想到的一切:
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
people = ('A','B','C','D','E','F','G','H')
y_pos = np.arange(len(people))
bottomdata = 3 + 10 * np.random.rand(len(people))
topdata = 3 + 10 * np.random.rand(len(people))
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
ax.barh(y_pos, bottomdata,color='r',align='center')
ax.barh(y_pos, topdata,color='g',align='center')
ax.set_yticks(y_pos)
ax.set_yticklabels(people)
ax.set_xlabel('Distance')
plt.show()
Run Code Online (Sandbox Code Playgroud)
然后我必须使用ax.text单独添加标签,这将是乏味的.理想情况下,我只想指定要插入的部分的宽度,然后用我选择的字符串更新该部分的中心.外面的标签(例如3800)我可以稍后添加自己,它主要是条形部分本身的标签,并以一种很好的方式创建这个堆叠的方法我遇到了问题.你甚至可以用任何方式指定"距离"即颜色范围吗?

我有一张DataFrame名为pandas的桌子df:
+--- -----+------------+-------------+----------+------------+-----------+
|avg_views| avg_orders | max_views |max_orders| min_views |min_orders |
+---------+------------+-------------+----------+------------+-----------+
| 23 | 123 | 135 | 500 | 3 | 1 |
+---------+------------+-------------+----------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)
我现在要寻找的是绘制一个分组条形图,在一个条形图中显示我(平均,最大,最小)的视图和订单.
也就是说,在x轴上会有视图和顺序相隔一段距离和3条(平均值,最大值,最小值)的视图和类似的订单.
我附上了一个示例条形图图像,只是想知道条形图应该如何看.
我从matplotlib中的分组条形图之间设置了以下代码,但它对我不起作用:
plt.figure(figsize=(13, 7), dpi=300)
groups = [[23, 135, 3], [123, 500, 1]]
group_labels = ['views', 'orders']
num_items = len(group_labels)
ind = np.arange(num_items)
margin = 0.05
width = (1. - 2. * margin) / num_items
s = plt.subplot(1, 1, 1)
for num, vals in enumerate(groups): …Run Code Online (Sandbox Code Playgroud) 如何在条形图中的条形图上方添加值的标签:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame({'Users': [ 'Bob', 'Jim', 'Ted', 'Jesus', 'James'],
'Score': [10,2,5,6,7],})
df = df.set_index('Users')
df.plot(kind='bar', title='Scores')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我正试图在堆积条形图中"稳健地"将数据标签居中.下面给出一个简单的代码和结果.如您所见,数据标签并未真正居中于所有矩形.我错过了什么?
import numpy as np
import matplotlib.pyplot as plt
A = [45, 17, 47]
B = [91, 70, 72]
fig = plt.figure(facecolor="white")
ax = fig.add_subplot(1, 1, 1)
bar_width = 0.5
bar_l = np.arange(1, 4)
tick_pos = [i + (bar_width / 2) for i in bar_l]
ax1 = ax.bar(bar_l, A, width=bar_width, label="A", color="green")
ax2 = ax.bar(bar_l, B, bottom=A, width=bar_width, label="B", color="blue")
ax.set_ylabel("Count", fontsize=18)
ax.set_xlabel("Class", fontsize=18)
ax.legend(loc="best")
plt.xticks(tick_pos, ["C1", "C2", "C3"], fontsize=16)
plt.yticks(fontsize=16)
for r1, r2 in zip(ax1, ax2):
h1 = r1.get_height() …Run Code Online (Sandbox Code Playgroud) python ×10
matplotlib ×9
pandas ×3
graph ×2
plot ×2
seaborn ×2
histogram ×1
python-2.7 ×1
python-3.x ×1
string ×1