python图分组条形图
我有一个3列数据,如下所示python图分组条形图,python,matplotlib,Python,Matplotlib,我有一个3列数据,如下所示 clm1 clm2 clm3 |["shared","connect"] 13297 |aaaa| |["stopped","failed] 25002 |aaaa| |["success","obtained"] 11189 |aaaa| |["shared","connect"] 16770 |bbbb| |["stopped","failed]
clm1 clm2 clm3
|["shared","connect"] 13297 |aaaa|
|["stopped","failed] 25002 |aaaa|
|["success","obtained"] 11189 |aaaa|
|["shared","connect"] 16770 |bbbb|
|["stopped","failed] 81777 |bbbb|
|["success","obtained"] 9555 |bbbb|
我想在python中使用下面的条形图,我能够编写简单的图形,但无法编写能够对clm3进行分组和绘图的逻辑
这里的主要问题是matplotlib认为所有分类数据“A”都代表相同的类别,因此它将它们绘制在“A”的相同位置。我们必须发明一个额外的类别来区分所有这些“A”值。例如,我们可以使用
cumcount()
对所有值“A”从0到n进行编号。例如:
from matplotlib import pyplot as plt
import pandas as pd
#create toy dataframe
#this part you should have included in your question
#as a Minimal, Complete, and Verifiable example
np.random.seed(1234)
df = pd.DataFrame({"cat": ["A", "B", "C", "C", "B", "C", "A"], "val": np.random.randint(1, 100, 7)})
#add column for multiple cat values and rearrange dataframe
df["cols"] = df.groupby("cat").cumcount()
df1 = df.pivot(index = "cat", columns = "cols", values = "val")
print(df1)
#plot this table
df1.plot.bar(color = "blue", edgecolor = "white")
plt.legend().set_visible(False)
plt.xticks(rotation = 0)
plt.show()
示例数据帧:
cols 0 1 2
cat
A 48.0 16.0 NaN
B 84.0 77.0 NaN
C 39.0 54.0 25.0
示例图:
编辑:
我刚刚注意到,在您的情况下,这更容易,因为,尽管您的问题中从未提到过这一点,但您可能希望将其作为类别“clm1”。因此,您可以简化此过程:
from matplotlib import pyplot as plt
import pandas as pd
#create toy dataframe
np.random.seed(1234)
df = pd.DataFrame({"clm1": ["X", "Y", "Z", "X", "Y", "Z"], "clm2": np.random.randint(1, 100, 6), "clm3": ["A", "A", "A", "B", "B", "B"]})
#rearrange dataframe and plot
df.pivot(index = "clm3", columns = "clm1", values = "clm2").plot.bar(edgecolor = "white")
plt.xticks(rotation = 0)
plt.show()
样本输出: