当散点图使用 alpha 时,颜色条看起来不正确

问题描述 投票:0回答:1

我已经编写了代码来创建右侧带有颜色条的散点图。但颜色条看起来不正确,因为颜色太浅而无法映射到绘图中使用的实际颜色。我不确定这里缺少什么或有什么问题。但我希望得到与此处显示的类似的内容:https://medium.com/@juliansteam/what-bert-topic-modelling-reveal-about-the-2021-unrest-in-south-africa-d0d15629a9b4 (大约在页面中间)

df = .... # data loading
df["topic"] = topics

# Plot parameters
top_n = topn
fontsize = 15
# some data preparation
to_plot = df.copy()
to_plot[df.topic >= top_n] = -1
outliers = to_plot.loc[to_plot.topic == -1]
non_outliers = to_plot.loc[to_plot.topic != -1]

#the actual plot
fig, ax = plt.subplots(figsize=(15, 15))
scatter_outliers = ax.scatter(outliers['x'], outliers['y'], color="#E0E0E0", s=1, alpha=.3)
scatter = ax.scatter(non_outliers['x'], non_outliers['y'], c=non_outliers['topic'], s=1, alpha=.3, cmap='hsv_r')
ax.text(0.99, 0.01, f"BERTopic - Top {top_n} topics", transform=ax.transAxes, horizontalalignment="right", color="black")
plt.xticks([], [])
plt.yticks([], [])
plt.colorbar(scatter)
plt.savefig(outfile+"_1.png", format='png', dpi=300)
plt.clf()
plt.close()

如您所见,示例图如下所示。颜色条已创建,但与上面链接中显示的颜色条相比,颜色非常浅,并且似乎与散点图上的颜色没有映射。有什么建议么?

python matplotlib
1个回答
3
投票

颜色条使用给定的

alpha=.3
。在散点图中,许多相同颜色的点叠加在一起,使它们看起来比单个点更亮。

解决这个问题的一种方法是创建一个供颜色条使用的

ScalarMappable
对象,采用颜色图和散点图的范数(但不包括其 alpha)。请注意,简单地更改散点对象的 alpha (
scatter.set_alpha(1)
) 也会更改绘图本身。

import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable
import numpy as np

x = np.random.normal(np.repeat(np.random.uniform(0, 20, 10), 1000))
y = np.random.normal(np.repeat(np.random.uniform(0, 10, 10), 1000))
c = np.repeat(np.arange(10), 1000)

scatter = plt.scatter(x, y, c=c, cmap='hsv_r', alpha=.3, s=3)
plt.colorbar(ScalarMappable(cmap=scatter.get_cmap(), norm=scatter.norm))
plt.tight_layout()
plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.