如何在Python中创建一个堆叠的条形图,其中每个变量的值之间存在间隙

PPM

我在Python中创建堆积的条形图时遇到问题。我有3个变量的数据,如下所示:

A=[3,5,7]

B=[4,5,7]

C=[2,3,4,5,6,7]

我想创建一个条形图,其中每个变量的值都如下所示

条形图,每个变量的值之间存在间隙:

在此处输入图片说明

有人可以帮我这个图表吗?非常感谢你。

亚历山大·B

实际上,您想绘制一个颜色表或接近甘特图的图形。我不知道在Python中真正方便的方法。

一种解决方案是使用matplotlib.pyplot.grid (doc)该讨论提供了一种解决方案

另一个解决方案是研究plotly软件包。它为表格和甘特图(doc)提供了非常漂亮的输出

在这里,我将向您展示hbar来自matplotlib的类似输出主要思想是重建单元格网格。每一行代表一类(例如ABC)。每行由相同数量的单元格组成。每个单元具有相同的宽度。单元格的颜色由数据的二进制翻译定义。

要调整x-axis标签,只需手动移动它们即可。

# Import module
import seaborn
import matplotlib.pyplot as plt
import numpy as np

##########################
#       Your input       #
##########################

A = [3, 5, 7]
B = [4, 5, 7]
C = [2, 3, 4, 5, 6, 7]


##########################
# Prepra the data        #
##########################
my_list = [A, B, C]
segments = 8
cell_width = 1000
nb_x_range = [i * cell_width for i in range(2, segments)]
classes = ["A", "B", "C"]
colors_def = {'A': {0: "w", 1: "b"},
              'B': {0: "w", 1: "g"},
              'C': {0: "w", 1: "y"},
              }

def create_data(my_list):
    data = np.zeros((segments + 1, len(classes)))
    for i, sub_list in enumerate(my_list):
        for elt in sub_list:
            data[elt, i] = 1
    return data

data = create_data(my_list)
print(data)
# [[0. 0. 0.]
#  [0. 0. 0.]
#  [0. 0. 1.]
#  [1. 0. 1.]
#  [0. 1. 1.]
#  [1. 1. 1.]
#  [0. 0. 1.]
#  [1. 1. 1.]
#  [0. 0. 0.]]

y_pos = np.arange(len(classes))
# left alignment of data starts at zero
left = np.zeros(len(my_list)) - cell_width/2


##########################
#       Create plot      #
##########################
# Set sea born for prettier graph
seaborn.set()
# create figure
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)
# Set X axis (shifted)
ax.set_xlim((min(nb_x_range)-cell_width/2, max(nb_x_range)+cell_width/2))

# For each cell
for d in data:
    # Define color for each row
    colors = [colors_def[classes[i]][bi] for i, bi in enumerate(d)]
    # e.g. colors = [colors_def["A"][d[0]], colors_def["B"][d[1]], colors_def["C"][d[2]]]

    # Draw cell
    ax.barh(y_pos, cell_width,
            height=1,           # Heights of horizontal bars
            color=colors,       # Colors
            left=left)          # Left padd from y-axis
    # Update margin
    left += cell_width

# Axis graduation
ax.set_yticks(y_pos)
ax.set_xticks(nb_x_range)
ax.set_yticklabels(classes)
ax.set_xlabel('Stacked bar')

plt.show()

输出如下: 在此处输入图片说明

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个直方图,其中每个条形图都是相应容器的热图?

创建一个堆叠条形图,其中包含 2 个条形的 3 个轨迹

如何绘制堆叠的条形图,其中每个条形图的顺序是基于一列的,而每个色阶的颜色是基于另一个的?

ggplot2堆叠的条形图,其中每个值都是一个组/颜色

如何在matplotlib中为条形图着色的列表变量中重复一个值?

如何创建一个单行条形图/热图,可以在其中绘制时间点的值?

从两个列表创建一个json以在Javascript中制作堆叠的条形图

Seaborn:如何为每个组创建一个带有两个变量的条形图?

如何在 Google Apps 脚本中创建一个包含时间列的条形图

是否可以创建一个条形图,其中 Y 是 Pandas 数据框中列的不同值的计数?

如何在条形图的每个条形上方添加一个额外的数字

如何从两个列表中创建堆叠条形图:考虑一个是集群,另一个是标志

如何在卡片小部件中显示孩子,其中一个孩子是 fl 条形图?

根据一个布尔列创建一个“堆叠”条形图

在 R 中创建一个带有 2 个条形图的条形图

ggplot2中的分组堆叠条形图,其中每个堆叠对应于其y轴值

如何在ggplot中的一个条形图中使用2个不同变量的柱形图

如何在 d3.js 中更改条形图的一个条形图?

根据一个变量的值在堆叠的条形图中排列堆叠

ggplot中的条形图由两列堆叠并避开了另一个变量

如何创建一个双轴条形图?

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

如何在 R 中创建一个条形图,y 轴上的频率不是密度?

Vega-Lite-如何在每个nar中绘制带有标签的堆叠条形图?

如何在R中的同一图中显示并排条形图以及堆叠条形图?

创建一个类别的条形图,每个类别仅填充一个

如何在y轴上创建具有相同数量的多个值的堆叠条形图

使用R base的堆叠条形图:如何在每个堆叠条形内添加值

如何组合表格以在 ggplot 中创建一个条形图?