我使用Python 3和Seaborn来制作分类条带图(请参见下面的代码和图片)。
每个条带图有2个数据点(每个性别一个)。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = [["city2", "f", 300],
["city2", "m", 39],
["city1", "f", 95],
["city1", "m", 53]]
df = pd.DataFrame(df, columns = ["city", "gender", "variable"])
sns.stripplot(data=df,x='city',hue='gender',y='variable', size=10, linewidth=1)
我得到以下输出x1c 0d1x
然而,我希望有一个线段连接男性和女性点。我希望图看起来像这样(见下图)。然而,我手动画了那些红线,我想知道是否有一个简单的方法来做w/ Seaborn或matplotlib。谢谢!
2条答案
按热度按时间5vf7fwbs1#
您可以使用
pandas.dataframe.groupby
创建f-m对的列表,然后绘制对之间的分段:输出:
yduiuuwa2#
只是为了给这个添加一个小东西,以便将来保存某人的时间。这个解决方案对我有效,但你会注意到,在某些情况下,垂直线与圆圈标记并不完全对齐。据我所知,其原因与figsize和dpi有关(不是xtick范围)。如果您将保存的.png图形版本与GUI中显示/生成的版本进行比较,(在我的例子中是Spyder),您可以看到它们是不同的,并且.png文件具有正确对齐的标记和线条。