python - Matplotlib 图例与 seaborn 气泡图大小不匹配
问题描述
我使用 seaborn 创建了一个气泡图,并使用 matplotlib 在我的 seaborn 图右侧绘制了图例。我在我的 seaborn 代码中指定了气泡的大小,sizes=(1,900)
但我的 matplotlib 图例上的缩放并不能反映绘图显示的内容。图例从 0 到 45 读取,但我的绘图中的实际数据范围从 0 到 900
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(11,4))
sns.scatterplot(y="Min", x="Max",
size="Count", sizes=(1,900), alpha=0.5,
color='r', data=code1, ax=ax1, legend=False)
sns.scatterplot(y="Min", x="Max", alpha=0.5,
color='b', size="Count", sizes=(1,900),
data=code2, ax=ax2, legend=False)
sns.scatterplot(y="Min", x="Max", alpha=0.5,
color='g', size="Count", sizes=(1,900),
data=code3, ax=ax3)
ax3.legend(loc='upper right', bbox_to_anchor=(1.7,1), labelspacing=2,
fontsize=14, frameon=False, markerscale=1)
这是我的情节
解决方案
我无法弄清楚 seaborn 如何构建图例输出以供 matplotlib 摄取。我确实了解到我的数据(code1、code2 和 code3)具有不同的最小值和最大值,这些值应该在 seaborn 的尺寸参数下指定。对于 code1,sizes=(1,900); 对于code2,大小=(1,300);对于code3,大小=(1,45)。因为我使用 matplotlib 将图例绘制到 code3 的绘图右侧,所以缩放比例特定于最右侧的绘图,而不是所有 3 个绘图。最后,我最终使用了 matplotlib 的 legend_elements 如下:
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(12,4))
scatter = ax1.scatter(y=code1["Min"], x=code1["Max"],
s=code1["Count"],
color='r', alpha=0.5)
ax2.scatter(y=code2["Min"], x=code2["Max"],
color='b', s=code2["Count"], alpha=0.5)
ax3.scatter(y=code3["Min"], x=code3["Max"],
color='g', s=code3["Count"], alpha=0.5)
kw = dict(prop="sizes", num=[10,100,500,900])
legend = ax3.legend(*scatter.legend_elements(**kw), title="Count", fontsize=12,
loc='upper right', bbox_to_anchor=(1.5,1), labelspacing=2,
frameon=False)
推荐阅读
- java - org.apache.poi.util.XMLHelper 缺少 newXMLReader() 方法
- javascript - Javascript 愚蠢的问题:if 语句语法
- tensorflow - !gcloud dataproc 作业提交 pyspark - 错误 AttributeError: 'str' object has no attribute 'batch'
- terraform - Terraform - 在 VPC 对等连接之间授权安全组
- java - 用 java 开发的应用程序的 IBM MQ 问题
- string - 如何从 vb.net 中的字符串中获取枚举类型
- javascript - Firebase 快照没有 val 属性
- swift - SwiftUI Function 声明一个 Opaque 返回类型,在一个 View 中插入两个按钮?
- html - 尝试将“宽度”内联样式属性应用于跨度标签
- python - 使用请求 python 库验证证书失败