我正在尝试将我的图转换为Seaborn,但我遇到了多个条形图的问题。数据是列表的列表,如下所示:
raw_data = [[47.66773437098896, 47.585408826566024, 45.426437828641106, 44.955787935926836],
[47.700582993718115, 47.59796443553682, 45.38896827262796, 44.80916093973529],
[47.66563311651776, 47.476571906259835, 45.21460968763448, 44.78683755963528],
[47.248523637295705, 47.42573841363118, 45.52890109500238, 45.10243082784969],
[47.14532745960979, 47.46958795222966, 45.4804195003332, 44.97715435208194],
[46.61620129160194, 47.316775886868584, 45.053032014046366, 44.527497508033704]]
Run Code Online (Sandbox Code Playgroud)
我的简单seaborn脚本如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
def plot_sns(raw_data):
data = np.array(raw_data)
x = np.arange(len(raw_data))
width = 0.2 # width of bar
sns.axes_style('white')
sns.set_style('white')
ax = sns.barplot(x, data[:,0])
Run Code Online (Sandbox Code Playgroud)
我想在图表中并排添加更多条形(每组 4 个条形)。在 Matplotlib 中,我通过绘制右侧间隔的另一个条形来实现这一点,但在 Seaborn 中它不起作用。我看到的所有示例都使用 Pandas 数据框。
我有多个数据框,我想将它们绘制在分组条形图视图中的同一个图形上。
这是两个非常小的数据框,我想将它们绘制在同一张图中。
数据框是:

我想绘制一个像这样的例子的图:

我尝试这样做,只绘制一张图:
fig, ax = plt.subplots()
df1.plot.bar(x='Zona',y='Total_MSP')
df4.plot.bar(x='Zona',y='NumEstCasasFavelas2017',ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个:
fig, ax = plt.subplots()
df1.plot.bar(x='Zona',y='Total_MSP',ax=ax)
df4.plot.bar(x='Zona',y='NumEstCasasFavelas2017',ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果只是图片中单个数据帧的数据,而不是两个数据帧的两个数据。请注意,只有两个数据帧的标题出现在同一张图片中,数据仅来自单个独立的数据帧。

于是我在网上找到了如下代码:
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
plotdata = pd.DataFrame({
"2018_m":[40, 12, 10, 26, 36],
"2019_m":[19, 8, 30, 21, 38],
"2020_m":[10, 10, 42, 17, 37]
}, index=["Dad", "Mam", "Bro", "Sis", "Me"]
)
plotdata2 = pd.DataFrame({
"2018_y":[20, 22, 10, 34, 12],
"2019_y":[12, 19, 27, 35, 14],
"2020_y":[21, 31, 52, 20, 34]
}, index=["Dad", "Mam", "Bro", "Sis", "Me"]
)
stacked_data = plotdata.apply(lambda x: x*100/sum(x), axis=1)
stacked_data2 = plotdata2.apply(lambda x: x*100/sum(x), axis=1)
stacked_data.plot(kind="bar", stacked=True)
stacked_data2.plot(kind="bar", stacked=True)
Run Code Online (Sandbox Code Playgroud)
这是输出:
我想知道将它们组合起来的最佳方式是什么,以便爸爸、妈妈、兄弟等每个人都有两个堆叠的条形?我在 Stack Overflow 上在线和其他地方遇到了一堆其他分组的堆叠条形码,但它们要求您迭代地定义每个条形的值,而理想情况下我只想引用数据框名称“plotdata” ' …
python matplotlib pandas stacked-bar-chart grouped-bar-chart
我最近正在学习如何使用 Altair 创建图表,但在自定义标题和轴时遇到了一些问题。我的图表代码目前如下所示:
chart = Chart(data).mark_bar().encode(
column='Cell Type',
x='Truth/Pred',
y='03',
color='Truth/Pred',
).properties(
title='Truth vs Predictions for Cell Type Percentages'
).configure_axisBottom(
disable = True
).configure_axisTop(
# labelPadding = 100
orientation = "bottom"
).configure_axisY(
title = "Cell Type Percentages"
)
chart.display()
Run Code Online (Sandbox Code Playgroud)
我有几个问题。
有没有办法让标题居中?
其次,我试图将 Y 轴设置为“单元格类型百分比”,但似乎没有 Y 轴,我不确定为什么。
最后,我尝试将顶部轴移至底部,并将标签稍微隔开一点,或旋转它们,使它们不会彼此重叠。然而,配置 axisTop 参数似乎根本不影响 Cell Type 轴!我也不确定为什么会这样。
我尝试遵循此堆栈溢出问题的答案:链接到相关问题
但我总是收到错误说明"additional properties are not allowed",所以我不确定他们是否停止在构造函数中使用配置属性。
任何帮助表示赞赏。谢谢你!
我正在尝试创建一个分组的堆叠条形图。
目前我有以下数据框:
>>> df
Value
Rating 1 2 3
Context Parameter
Total 1 43.312347 9.507902 1.580367
2 42.862649 9.482205 1.310549
3 43.710651 9.430811 1.400488
4 43.209559 9.803418 1.349094
5 42.541436 10.008994 1.220609
6 42.978286 9.430811 1.336246
7 42.734164 10.317358 1.606064
User 1 47.652348 11.138861 2.297702
2 47.102897 10.589411 1.848152
3 46.853147 10.139860 1.848152
4 47.252747 11.138861 1.748252
5 45.954046 10.239760 1.448551
6 46.353646 10.439560 1.498501
7 47.102897 11.338661 1.998002
Run Code Online (Sandbox Code Playgroud)
我希望将每个参数的“总计”和“用户”栏分组在一起。
这是生成的图表df.plot(kind='bar', stacked=True):
这些条形本身看起来是正确的,但是如何让每个Parameter的 …
python matplotlib seaborn stacked-bar-chart grouped-bar-chart
如何在seaborn histplot 中的男性和女性条之间添加空格?
import seaborn as sns
tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="day", hue="sex", multiple="dodge", shrink=.9)
plt.show()
Run Code Online (Sandbox Code Playgroud)