使用“大小”参数时调整散点图中的标记大小

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] 如何在散点图中标记心形

我们如何根据颜色标记散点图的图例

使用 OpenGL 的散点图:如何设置标记样式

如何在 MATLAB 2014b 的散点图中增加图例的标记大小? [复制]

python数据可视化--matplotlib绘制散点图

更改 c3.js 散点图中气泡的大小