使用“大小”参数时调整散点图中的标记大小
Posted
技术标签:
【中文标题】使用“大小”参数时调整散点图中的标记大小【英文标题】:Adjusting Marker Size in Scatter Plot when using 'size' argument 【发布时间】:2022-01-02 02:36:42 【问题描述】:假设我正在 matplotlib 中创建关于极坐标投影的散点图。我使用 size 参数将标记大小分配给变量。在结果图中,标记非常小,有些几乎不可见。我还需要一个图例来显示不同大小标记的实际值。所以我需要增加标记大小但不改变图例中的标签(所以 s=3*t 不起作用,因为它改变了图例中的标签)。最好的方法是什么?
fig = plt.figure(figsize=(5,5))
plt.style.use('default')
ax = fig.add_subplot(projection='polar')
c = ax.scatter(r, s, c=c, s=t, cmap='copper')
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
plt.legend(*c.legend_elements('sizes', num=3), loc=(1, 0.8))
plt.show()
在本例中,r、s、c 和 t 是简单的一维数组
【问题讨论】:
散点图上的标记大小和图例中的标记大小是不是必须要一致,如果不一样不方便可视化?我已将ax.legend(*c.legend_elements('sizes', num=3), loc=(1, 0.8))
添加到example 以确认。
是的,图中的标记和图例需要具有相同的大小,这可以通过使用 s=3*t 来更改(在我的示例中)。必要的是在更改标记大小的同时保持图例中的标签与其现在的方式(25、50、75)相同。使用 s=3*t 会更改原始值,从而更改图例中的标签。
【参考方案1】:
使用official sample,我自定义了图例标签。我得到了图例和标签,并重写了标签的值。 可能有一种方法可以从乳胶格式中获取值,但我一直无法找到。
import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)
# Compute areas and colors
N = 150
r = 2 * np.random.rand(N)
theta = 2 * np.pi * np.random.rand(N)
area = 200 * r**2
colors = theta
fig = plt.figure()
ax = fig.add_subplot(projection='polar')
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)
# ax.legend(*c.legend_elements('sizes', num=3), loc=(1, 0.8))
handlers, labels = c.legend_elements('sizes', num=3)
labels[0] = r'$\mathdefault50$'
labels[1] = r'$\mathdefault75$'
ax.legend(handlers, labels, loc=(1, 0.8))
plt.show()
修改前的图表
【讨论】:
以上是关于使用“大小”参数时调整散点图中的标记大小的主要内容,如果未能解决你的问题,请参考以下文章
[散点图][Plotly][Python] 如何在散点图中标记心形