如何使用Matplotlib在直方图中按组填充颜色?

5

我知道如何在R中做到这一点,并提供了以下代码。 我想知道如何在Python Matplotlib或使用任何其他库中实现类似于下面提到的功能

library(ggplot2)
ggplot(dia[1:768,], aes(x = Glucose, fill = Outcome)) +
  geom_bar() +
  ggtitle("Glucose") +
  xlab("Glucose") +
  ylab("Total Count") +
  labs(fill = "Outcome")


1
http://ggplot.yhathq.com/ - M--
我认为 ggplot 已经过时且不再维护。一个替代品是 plotnine - Quang Hoang
2个回答

5
使用pandas可以对数据框进行透视并直接绘图。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# dataframe with two columns in "long form"
g = np.array([np.random.normal(5, 10, 500),
              np.random.rayleigh(10, size=500)]).flatten()
df = pd.DataFrame({'Glucose': g, 'Outcome': np.repeat([0,1],500)})

# pivot and plot
df.pivot(columns="Outcome", values="Glucose").plot.hist(bins=100)

plt.show()

enter image description here


1
你能挑选颜色吗? - Ryan
1
@Ryan 可能已经弄清楚了,但是对于其他想知道的人,您可以通过 color 参数向 plot.hist() 提供颜色列表。此外,请注意您可以使用 stacked=True 参数,使直方图不重叠。它默认为 False。 - ASaunders
@ImportanceofBeingErnest,为什么当我执行random_sample_join.pivot(columns="p_pb6", values = [x for x in random_sample_join]).hist(bins = 5, figsize = (30,30)) plt.show()时,它仍然为我每个要绘制的变量中的每个p_pb6值提供一个单独的图表,而不是像您的输出那样根据该变量进行颜色编码? - bernando_vialli

4
请考虑下面的例子,它使用了seaborn 0.11.1。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# generate random data
data = {'Glucose': np.random.normal(5, 10, 100),
        'Outcome': np.random.randint(2, size=100)}
df = pd.DataFrame(data)

# plot
fig, ax = plt.subplots(figsize=(10, 10))
sns.histplot(data=df, x='Glucose', hue='Outcome', stat='count', edgecolor=None)
ax.set_title('Glucose')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接