地块类别、比例、总数

如何解决地块类别、比例、总数

我正在尝试使用名称、道具、总数在 python 中制作条形图。这个想法是我应该有名字,然后我是否可以显示总流量和男性比例。

我有以下示例数据

NAME    prop_male    total 
GGD     0.254147    727240
CCG     0.216658    323510
PPT     0.265414    251023
MMMA    0.185105    210416
JKK     0.434557    201594
BBD     0.279319    198998
KNL.    0.277761    190246
TSK     0.277653    171030
LIS     0.218444    165168
BRK     0.44755     161124

我试过了,但不知何故我错过了技巧

将熊猫导入为 pd 将 seaborn 导入为 sns

x,y,hue = "name","proportion","total"

(df[x]
 .groupby(df[hue])
 .value_counts(normalize=True)
 .rename(y)
 .reset_index()
 .pipe((sns.barplot,"data"),x=x,y=y,hue=hue))

有人可以建议/帮助一个有意义的情节,我可以一起显示所有 3 个信息。

提前致谢

解决方法

实现这一目标的各种方法。一种方法是计算男性的数量并将条形图绘制在彼此的顶部:

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

df = pd.DataFrame({"name": list("ABC"),"proportion": [0.2,0.7,0.1],"total": [123,321,213]})
df["male"] = df.proportion * df.total

ax = sns.barplot(data=df,x="name",y="total",color="lightblue")
sns.barplot(data=df,y="male",color="blue",ax=ax)
ax.set_ylabel("male/total")
plt.show()

示例输出: enter image description here

seaborn中的hue参数通常是long-form data中的一个分类类别。为了说明这个语句,这里有一个示例代码:

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

df = pd.DataFrame({"name": list("ABC"),213]})
df["male"] = df.proportion * df.total

#transform the data from wide to long form
df_plot = df.melt(id_vars=["name"],value_vars=["male","total"])
#use the former column names as categories in a barplot
sns.barplot(data=df_plot,y="value",hue="variable")
plt.show()

输出: enter image description here

您也可以决定分别显示百分比和总数:

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

df = pd.DataFrame({"name": list("ABC"),213]})

fig,ax1 = plt.subplots()
ax2 = ax1.twinx()
sns.barplot(data=df,color="lightblue",ax=ax1)
sns.lineplot(data=df,y= "proportion",color="black",lw=3,ls="--",ax=ax2)
plt.show()

示例输出: enter image description here

我有没有提到有不止一种方法?

,

绘制这些信息的方法有无数种, 但是,如果您想在条形图(可见的图表)中对其进行汇总,则列的比例是完全不同的。

最好的方法可能是 T 先生建议的,情节看起来非常好(不过我会添加一个图例来解释深蓝色条是男性计数,而浅蓝色是总数)。

为了完整起见,我将报告其他两个选项,它们给出的结果不太容易解释 ():

您可以缩放“总计”列以使其可见, 你可以做一个散点图

import matplotlib.pyplot as plt
import matplotlib
import numpy as np

Name = ['GGD','CCG','PPT','MMMA','JKK','BBD','KNL']
prop_male = [0.254147,0.216658,0.265414,0.185105,0.434557,0.279319,0.277761]
total = [727240,323510,251023,210416,201594,198998,190246]

#Plot as bar

x = np.arange(len(Name))  # the label locations
width = 0.35  # the width of the bars

fig,ax = plt.subplots(1,2,figsize=(20,8))
rects1 = ax[0].bar(x - width/2,[float(i)/1e6 for i in total],width,label=r'Total $\times$ 1e-6 ')
rects2 = ax[0].bar(x + width/2,prop_male,label='Prop_male')

ax[0].set_xticks(x)
ax[0].set_xticklabels(Name,size=15)
ax[0].legend()

ax[0].set_ylabel("Counts [a.u.]",size=15)

#plot as scatter

norm = matplotlib.colors.Normalize(vmin=0,vmax=len(Name))
mapper = matplotlib.cm.ScalarMappable(norm=norm,cmap='viridis')
colors = np.array([(mapper.to_rgba(v)) for v in range(len(Name))])

for x,y,c in zip(prop_male,total,colors):
    ax[1].plot(x,'o',color=c,markersize=10,alpha=0.8)

cmap = plt.get_cmap('viridis',len(Name))

sm = plt.cm.ScalarMappable(cmap=cmap,norm=norm)
sm.set_array([])
cbar = plt.colorbar(sm,ticks=np.linspace(0,len(Name),len(Name)))
cbar.ax.set_yticklabels(Name)
cbar.set_label('Name',size=15)

ax[1].set_xlabel("prop_male",size=15)
ax[1].set_ylabel("total",size=15)

剧情应该是这样的

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?