按值重复颜色的堆叠条形图和每个 bin 的固定长度
Stacked barplot with repeated colors by value and fixed length for each bin
我有一个包含 10 列和三个值 {0,1,2} 的 DataFrame:
row1 = [random.randint(0,2) for i in range(10)]
row2 = [random.randint(0,2) for i in range(10)]
df = pd.DataFrame([{i:row1[i] for i in range(10)}, {i:row2[i] for i in range(10)}])
我想在水平条形图中绘制这些值,其中每个值都应该有另一种颜色,但宽度相同。
先试试
df.plot(kind='barh', stacked=True, legend=False)
ok,所以这里每个stacked value的宽度是不固定的。所以我想到了一个 helper Dataframe,它将宽度固定为一个:
df2 = pd.DataFrame([{i:1 for i in range(10)}, {i:1 for i in range(10)}])
好的,完美,每个堆叠的列都具有相同的宽度,但现在我希望根据 df
中的值,颜色为灰色、蓝色或红色
- 我该怎么做?
- 有没有更好的方法来生成这样的图?
- 这样的剧情有具体的名字吗?
- 是否可以使用色标来代替每个值的固定颜色?
- 奖励:有没有一种方法可以为每个 bin 加框?因此,如果两个箱子(连续的列)彼此相邻具有相同的值,您仍然可以看到这是两个独立的数据点?
我认为您正在搜索 plt.imshow
或 sns.heatmap
而不是堆栈条形图。例如:
sns.heatmap(df, cmap='tab10', linewidths=1, linecolor='w')
给出:
我有一个包含 10 列和三个值 {0,1,2} 的 DataFrame:
row1 = [random.randint(0,2) for i in range(10)]
row2 = [random.randint(0,2) for i in range(10)]
df = pd.DataFrame([{i:row1[i] for i in range(10)}, {i:row2[i] for i in range(10)}])
我想在水平条形图中绘制这些值,其中每个值都应该有另一种颜色,但宽度相同。
先试试
df.plot(kind='barh', stacked=True, legend=False)
ok,所以这里每个stacked value的宽度是不固定的。所以我想到了一个 helper Dataframe,它将宽度固定为一个:
df2 = pd.DataFrame([{i:1 for i in range(10)}, {i:1 for i in range(10)}])
好的,完美,每个堆叠的列都具有相同的宽度,但现在我希望根据 df
- 我该怎么做?
- 有没有更好的方法来生成这样的图?
- 这样的剧情有具体的名字吗?
- 是否可以使用色标来代替每个值的固定颜色?
- 奖励:有没有一种方法可以为每个 bin 加框?因此,如果两个箱子(连续的列)彼此相邻具有相同的值,您仍然可以看到这是两个独立的数据点?
我认为您正在搜索 plt.imshow
或 sns.heatmap
而不是堆栈条形图。例如:
sns.heatmap(df, cmap='tab10', linewidths=1, linecolor='w')
给出: