如何加载和转换数据以绘制水平堆叠条形图?

马克·柯比
  • 我在Matplotlib上将离散分布的示例用作水平条形图,在matplotlib上将离散分布的示例作为水平条形图创建了一个图表,显示了在Shropshire选举2017中的投票份额。

  • 但是,由于我不知道如何操作数据,因此不得不在程序中手动输入数据,这显然是我自己的无知。

  • 我将相关数据保存在CSV文件中,因此可以将其作为数据框加载。

    • CSV每个病房都有一行,其中每个党派(托里,劳工党,劳工,格林,独立)有63列和%的投票栏,因此有5个实质列。
  • 我想要有关如何更改数据形式的建议,使其类似于此图表的输入。

  • 我不确定它是什么,但似乎可能是具有键和值的字典类型:

我的数据部分读取:

category_names = ['Labour', 'LD', 'Indep', 'Green', 'Tory']
results = {'Abbey': [16, 56, 4,0, 24],
           'Albrighton': [0, 0, 32, 0, 68],
           'Alveley & Claverley': [0, 25, 0, 0, 75],
           'Bagley': [30, 30, 0, 0, 40],
           'Battlefield': [34, 0, 0, 9, 57],
           'Bayston Hill, Column & Sutton': [53, 4, 3, 7, 33],
           'Belle Vue': [43,28,0,5,24]}
  • 我试图以大熊猫数据框的形式直接从csv文件中获取要像这样格式化的数据。

  • 尝试了值方法和to_dict方法,虽然它们获得的数据看起来相似,但它们并不完全正确。

    • 我认为有必要将数据分为键和值,但这正是我所学知识所无法及的。
特伦顿·麦金尼

选项1:'Party'作为y轴

  • OP的使用resultscategory_names数据
import pandas as pd
import matplotlib.pyplot as plt

# plt configuration parameters
plt.style.use('seaborn')
plt.rcParams['figure.figsize'] = (16.0, 10.0)

# setup dataframe using the dict provided in the OP
df = pd.DataFrame(results, index=category_names)

# display(df)
        Abbey  Albrighton  Alveley & Claverley  Bagley  Battlefield  Bayston Hill, Column & Sutton  Belle Vue
Labour     16           0                    0      30           34                             53         43
LD         56           0                   25      30            0                              4         28
Indep       4          32                    0       0            0                              3          0
Green       0           0                    0       0            9                              7          5
Tory       24          68                   75      40           57                             33         24

# plot 
ax = df.plot.barh(stacked=True, cmap='tab10', figsize=(16, 10))

# annotations:
for p in ax.patches:
    left, bottom, width, height = p.get_bbox().bounds
    if width > 0:
         ax.annotate(f'{width:0.0f}', xy=(left+width/2, bottom+height/2), ha='center', va='center')

在此处输入图片说明

选项2:'Ward'作为y轴

  • 使用pandas.DataFrame.T以交换IndexColumns
    • 'Ward'现在将成为索引'Party'并将成为列
# using df from Option 1

# transpose df so Party is the in the columns and Ward is the index
dft = df.T

# display(dft)
                               Labour  LD  Indep  Green  Tory
Abbey                              16  56      4      0    24
Albrighton                          0   0     32      0    68
Alveley & Claverley                 0  25      0      0    75
Bagley                             30  30      0      0    40
Battlefield                        34   0      0      9    57
Bayston Hill, Column & Sutton      53   4      3      7    33
Belle Vue                          43  28      0      5    24

# plot
ax = dft.plot.barh(stacked=True, figsize=(16, 10))

plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))

# annotations:
for p in ax.patches:
    left, bottom, width, height = p.get_bbox().bounds
    if width > 0:
         ax.annotate(f'{width:0.0f}', xy=(left+width/2, bottom+height/2), ha='center', va='center')

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

堆叠水平条形图

Pandas 绘制堆叠和未堆叠条形图

如何使用matplotlib / pandas绘制非堆叠且非并排的水平条形图?

如何计算和绘制堆叠条形图的百分比标签以及条形图的总数?

重塑数据框并绘制堆叠的条形图

在 r 中绘制堆叠和分组的条形图

如何从数据帧中以绘图方式绘制堆叠的条形图?

如何在汇总数据上绘制堆叠条形图

如何在ggplot中绘制堆叠条形图以获取数据类型列表?

如何根据熊猫中值的频率绘制堆叠条形图?

R水平堆叠的ggvis条形图

如何创建水平堆叠的条形图,在条形图上本身以及条形图上的标签?

如何为三组数据创建堆叠的条形图?

如何在直方图中拆分和堆叠条形图,仅填充下部条形图?

如何从一个数据框中绘制多个带有填充条形图的堆叠条形图

分组堆叠条形图:关于堆叠顺序、图形的水平方向和组标签的问题

从右到左绘制水平条形图

如何使用给定的特定数据结构绘制百分比堆叠的条形图

如何在ggplot2中绘制(复杂的)堆叠条形图,而无需复杂的手动数据聚合

在R中作图:如何在时间序列数据中绘制堆叠的条形图以显示百分比构成?

从数据框创建堆叠的条形图

堆叠和分组的条形图

堆叠和分组的条形图

如何使用Chart.JS创建堆叠的条形图/水平图?

如何使ggplot订购堆叠条形图

如何与订单条形图堆叠

如何在R中使用x,y数据绘制条形图和误差线

在R中使用给定数据创建水平“堆叠”条形图

如何绘制熊猫中非数值数据的条形图