相关疑难解决方法(0)

在matplotlib条形图上添加值标签

我被困在一些感觉应该相对容易的事情上.我下面的代码是基于我正在研究的更大项目的示例.我没有理由发布所有细节,所以请接受我带来的数据结构.

基本上,我正在创建一个条形图,我只是想弄清楚如何在条形图上添加值标签(在条形图的中心,或者在它上面).一直在寻找网络上的样本,但没有成功实现我自己的代码.我相信解决方案要么是'text',要么是'annotate',但是我:a)不知道使用哪一个(一般来说,还没弄清楚何时使用哪个).b)无法看到要么呈现价值标签.非常感谢您的帮助,我的代码如下.提前致谢!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.mpl_style', 'default') 
%matplotlib inline

# Bring some raw data.
frequencies = [6, 16, 75, 160, 244, 260, 145, 73, 16, 4, 1]

# In my original code I create a series and run on that, 
# so for consistency I create a series from the list.
freq_series = pd.Series.from_array(frequencies)

x_labels = [108300.0, 110540.0, 112780.0, 115020.0, 117260.0, 119500.0, 
            121740.0, 123980.0, 126220.0, 128460.0, 130700.0]

# Plot the figure. …
Run Code Online (Sandbox Code Playgroud)

python data-visualization matplotlib python-2.7 pandas

74
推荐指数
5
解决办法
13万
查看次数

使用matplotlib堆积条形图

我使用matplotlib生成条形图,看起来堆积条形图有一个错误.每个垂直堆栈的总和应为100.但是,对于X-AXIS刻度65,70,75和80,我们得到完全任意的结果,这没有任何意义.我不明白是什么问题.请在下面找到MWE.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
header = ['a','b','c','d']
dataset= [('60.0', '65.0', '70.0', '75.0', '80.0', '85.0', '90.0', '95.0', '100.0', '105.0', '110.0', '115.0', '120.0', '125.0', '130.0', '135.0', '140.0', '145.0', '150.0', '155.0', '160.0', '165.0', '170.0', '175.0', '180.0', '185.0', '190.0', '195.0', '200.0'), (0.0, 25.0, 48.93617021276596, 83.01886792452831, 66.66666666666666, 66.66666666666666, 70.96774193548387, 84.61538461538461, 93.33333333333333, 85.0, 92.85714285714286, 93.75, 95.0, 100.0, 100.0, 100.0, 100.0, 80.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0), (0.0, 50.0, 36.17021276595745, 11.320754716981133, 26.666666666666668, 33.33333333333333, 29.03225806451613, …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib bar-chart

23
推荐指数
4
解决办法
5万
查看次数

matplotlib中的堆栈条形图并为每个部分添加标签(和建议)

我试图在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)我可以稍后添加自己,它主要是条形部分本身的标签,并以一种很好的方式创建这个堆叠的方法我遇到了问题.你甚至可以用任何方式指定"距离"即颜色范围吗?

在此输入图像描述

python matplotlib

12
推荐指数
2
解决办法
3万
查看次数

如何向条形图添加多个注释

我想将百分比值 - 除了计数 - 添加到我的熊猫条形图中。但是,我无法这样做。我的代码如下所示,到目前为止,我可以获得要显示的计数值。有人可以帮我在每个条形显示的计数值旁边/下方添加相对百分比值吗?

import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')

import seaborn as sns
sns.set_style("white")

fig = plt.figure()
fig.set_figheight(5)
fig.set_figwidth(10)

ax = fig.add_subplot(111)

counts = [29227, 102492,  53269, 504028, 802994]

y_ax = ('A','B','C','D','E')
y_tick = np.arange(len(y_ax))

ax.barh(range(len(counts)), counts, align = "center", color = "tab:blue")
ax.set_yticks(y_tick)
ax.set_yticklabels(y_ax, size = 8)

#annotate bar plot with values
for i in ax.patches:
    ax.text(i.get_width()+.09, i.get_y()+.3, str(round((i.get_width()), 1)), fontsize=8)

sns.despine()
plt.show();
Run Code Online (Sandbox Code Playgroud)

我的代码的输出如下所示。如何在显示的每个计数值旁边添加 % 值?

在此处输入图片说明

python matplotlib bar-chart pandas

6
推荐指数
1
解决办法
1409
查看次数

在 matplotlib bar_label 中隐藏小于 n 的条形标签

我喜欢最近 matpolotlib 更新中 ax.bar_label 的易用性。

我热衷于隐藏低值数据标签以提高最终图中的可读性,以避免标签重叠。

如何在下面的代码中隐藏小于预定义值(这里假设小于 0.025)的标签?

在此输入图像描述

df_plot = pd.crosstab(df['Yr_Lvl_Cd'], df['Achievement_Cd'], normalize='index')
ax = df_plot.plot(kind = 'bar', stacked = True,  figsize= (10,12))
for c in ax.containers:
    ax.bar_label(c, label_type='center', color = "white")
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

6
推荐指数
1
解决办法
3499
查看次数

如何注释堆积条形图的每个部分

在此输入图像描述

我一直在尝试用其值来注释堆积条形图的每个子金额,如上图所示(值不准确,只是一个示例)。

df.iloc[1:].T.plot(kind='bar', stacked=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我使用的数据框: 在此输入图像描述

链接的帖子与我的问题有些相似,但我不理解该答案中给出的代码,也没有给出任何解释。

在堆积条形图中注释值 Matplotlib

python matplotlib bar-chart pandas stacked-bar-chart

4
推荐指数
1
解决办法
6003
查看次数

在堆叠的条形图中添加标签

我正在绘制某些类别中各个办公室的交叉表。我想放一张水平堆叠的条形图,在其中标记每个办公室及其值。

这是一些示例代码:

df = pd.DataFrame({'office1': pd.Series([1,np.nan,np.nan], index=['catA', 'catB', 'catC']),
              'office2': pd.Series([np.nan,8,np.nan], index=['catA', 'catB', 'catC']),
              'office3': pd.Series([12,np.nan,np.nan], index=['catA', 'catB', 'catC']),
              'office4': pd.Series([np.nan,np.nan,3], index=['catA', 'catB', 'catC']),
              'office5': pd.Series([np.nan,5,np.nan], index=['catA', 'catB', 'catC']),
              'office6': pd.Series([np.nan,np.nan,7], index=['catA', 'catB', 'catC']),
              'office7': pd.Series([3,np.nan,np.nan], index=['catA', 'catB', 'catC']),
              'office8': pd.Series([np.nan,np.nan,11], index=['catA', 'catB', 'catC']),
              'office9': pd.Series([np.nan,6,np.nan], index=['catA', 'catB', 'catC']),
              })
ax = df.plot.barh(title="Office Breakdown by Category", legend=False, figsize=(10,7), stacked=True)
Run Code Online (Sandbox Code Playgroud)

这给了我一个很好的起点:

堆积条形图示例

但是,我想拥有的是: 带标签的条形图

经过研究,我想到了以下代码,可以在“类别”轴上正确排列标签:

def annotateBars(row, ax=ax):
    for col in row.index:
        value = row[col]
        if (str(value) != 'nan'):
            ax.text(value/2, labeltonum(row.name), col+","+str(value))

def …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

3
推荐指数
1
解决办法
2853
查看次数

如何使用聚合值注释seaborn barplot

如何修改以下代码以显示条形图的每个条上的平均值以及不同的误差条?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("white")

a,b,c,d = [],[],[],[]

for i in range(1,5):
   np.random.seed(i)
   a.append(np.random.uniform(35,55))
   b.append(np.random.uniform(40,70))
   c.append(np.random.uniform(63,85))
   d.append(np.random.uniform(59,80))

data_df =pd.DataFrame({'stages':[1,2,3,4],'S1':a,'S2':b,'S3':c,'S4':d})
print("Delay:")

display(data_df)

          S1         S2         S3         S4
0  43.340440  61.609735  63.002516  65.348984
1  43.719898  40.777787  75.092575  68.141770
2  46.015958  61.244435  69.399904  69.727380
3  54.340597  56.416967  84.399056  74.011136

meansd_df=data_df.describe().loc[['mean', 'std'],:].drop('stages', axis = 1)
display(meansd_df)

sns.set()
sns.set_style('darkgrid',{"axes.facecolor": ".92"}) # (1)
sns.set_context('notebook')
fig, ax = plt.subplots(figsize = (8,6))

x = meansd_df.columns
y …
Run Code Online (Sandbox Code Playgroud)

python matplotlib bar-chart pandas seaborn

2
推荐指数
1
解决办法
1824
查看次数

PairGrid python seaborn 中的堆叠条形图

我希望重现该教程中的 PairGrid 图,但在本地我的条形图不像教程中那样堆叠,我不知道如何使它们如此。

import seaborn as sns
import matplotlib.pyplot as plt  # for graphics
import os
os.sys.version
# '3.6.4 (default, Sep 20 2018, 19:07:50) \n[GCC 5.4.0 20160609]'

sns.__version__    
# '0.9.0'

mpg = sns.load_dataset('mpg')

g = sns.PairGrid(data=mpg[["mpg", "horsepower", "weight", "origin"]], hue="origin")
g.map_upper(sns.regplot)
g.map_lower(sns.residplot)

# below for the histogram
g.map_diag(plt.hist)

# also I tried
# g.map_diag(lambda x, label, color: plt.hist(x, label=label, color=color, histtype='barstacked', alpha=.4))
# g.map_diag(plt.hist, histtype='barstacked')
# but same result

g.savefig('./Plots/mpg.svg')

Run Code Online (Sandbox Code Playgroud)

我的情节

教程的情节

我是否必须遵循此帖子答案的第二个答案,这表明处理 seaborn 非常棘手,还是应该按照此处的建议返回 plt …

python matplotlib seaborn

1
推荐指数
1
解决办法
674
查看次数

如何注释条形图并添加自定义图例

我正在尝试绘制一个如下所示的条形图,我不确定如何在每列顶部设置百分比值,并在右侧设置图例。我的代码片段如下。它正在工作,但是缺少百分比值和图例

import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt

objects = ('18-25', '26-30', '31-40', '40-50')
y_pos = np.arange(len(objects))
performance = [13, 18, 16, 3]
width = 0.35  # the width of the bars
plt.bar(y_pos, performance, align='center', alpha=0.5, color=('red', 'green', 'blue', 'yellow'))
plt.xticks(y_pos, objects)
plt.ylabel('%User', fontsize=16)
plt.title('Age of Respondents', fontsize=20)
width = 0.35

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python matplotlib bar-chart

1
推荐指数
1
解决办法
7393
查看次数

向条形图添加值标签

我一直在尝试绘制每个条形图上带有值标签的条形图。我已经到处搜索但无法完成此操作。我的 df 是下面这个。

Pillar                       % 
Exercise                    19.4
Meaningful Activity         19.4
Sleep                        7.7
Nutrition                   22.9
Community                   16.2
Stress Management           23.9
Run Code Online (Sandbox Code Playgroud)

到目前为止我的代码是

df_plot.plot(x ='Pillar', y='%', kind = 'bar')
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

1
推荐指数
1
解决办法
6417
查看次数

Pandas bar 如何标记所需值

d = {'X':[1,2,3,4],'A': [50,40,20,60], '% of Total in A':[29.4,23.5,11.8,35.3] , 'B': [25,10,5,15], '% in A' :[50,25,25,25]}
df = pd.DataFrame(d)
ax = df.plot(x='X',y="A", kind="bar")
df.plot(x='X', y="B", kind="bar", ax=ax,color='C2')

   X   A  % of Total in A   B  % in A
0  1  50             29.4  25      50
1  2  40             23.5  10      25
2  3  20             11.8   5      25
3  4  60             35.3  15      25
Run Code Online (Sandbox Code Playgroud)

我有上面的数据框,并且我知道如何根据两列 A 和 B 绘制堆积条形图。 在此输入图像描述

如何在条形顶部添加值标签,例如对于 X=0,我想在蓝色条形上方标记 50(总数的 29.4%),在蓝色条形内的绿色条形上方标记 25(组中的 50%)酒吧。

任何帮助表示赞赏。

python matplotlib bar-chart pandas plot-annotations

1
推荐指数
1
解决办法
6140
查看次数