Matplotlib:如何在散点图中对 values/data 进行分类?
Matplotlib: how to classify values/data in a scatter plot?
我正在尝试创建一个散点图,您可以在图表上区分两件事:
按颜色。例如,如果值为负,则颜色为红色;如果值为正,则颜色为蓝色。
按标记大小。例如,如果值介于 -0.20 和 0 之间,大小为 100,如果值介于 0 和 0.1 之间,则大小为 200,如果值介于 0.5 和 1 之间,则大小为 300 等等...
这是我正在处理的一些数据(以防万一):
0 0.15
1 0.04
2 0.02
3 0.01
4 -0.03
5 -0.07
6 -0.25
7 -0.27
8 -0.30
我试过以下方法:
fig = plt.figure(figsize=(15, 8))
ax = fig.add_subplot(1, 1, 1)
res = np.genfromtxt(os.path.join(folder, 'residuals.csv'), delimiter=',', names=True)
for name in res.dtype.names[1:]:
plt.scatter(res.x, res.y, s=200, c=res.residual, cmap='jet')
效果很好,但它只按颜色对我的数据进行排序。大小相同,我无法分辨哪些是 negative/positive 值,所以这就是为什么我正在寻找前面提到的这两个条件。
非常感谢任何帮助!
Seaborn 的 scatterplot 允许根据变量进行着色和大小调整。这是您的数据类型的样子。
import matplotlib.pyplot as plt
from matplotlib.colors import TwoSlopeNorm
import numpy as np
import seaborn as sns
res = np.array([0.15, 0.04, 0.02, 0.01, -0.03, -0.07, -0.25, -0.27, -0.30])
x = np.arange(len(res))
y = np.ones(len(res))
hue_norm = TwoSlopeNorm(vcenter=0) # to make sure the center color goes to zero
ax = sns.scatterplot(x=x, y=y, hue=res, hue_norm=hue_norm, size=res, sizes=(100, 300), palette='Spectral')
for xi, resi in zip(x, res):
ax.text(xi, 1.1, f'{resi:.2f}', ha='center', va='bottom')
ax.set_ylim(0.75, 2)
ax.set_yticks([])
plt.show()
我正在尝试创建一个散点图,您可以在图表上区分两件事:
按颜色。例如,如果值为负,则颜色为红色;如果值为正,则颜色为蓝色。
按标记大小。例如,如果值介于 -0.20 和 0 之间,大小为 100,如果值介于 0 和 0.1 之间,则大小为 200,如果值介于 0.5 和 1 之间,则大小为 300 等等...
这是我正在处理的一些数据(以防万一):
0 0.15
1 0.04
2 0.02
3 0.01
4 -0.03
5 -0.07
6 -0.25
7 -0.27
8 -0.30
我试过以下方法:
fig = plt.figure(figsize=(15, 8))
ax = fig.add_subplot(1, 1, 1)
res = np.genfromtxt(os.path.join(folder, 'residuals.csv'), delimiter=',', names=True)
for name in res.dtype.names[1:]:
plt.scatter(res.x, res.y, s=200, c=res.residual, cmap='jet')
效果很好,但它只按颜色对我的数据进行排序。大小相同,我无法分辨哪些是 negative/positive 值,所以这就是为什么我正在寻找前面提到的这两个条件。
非常感谢任何帮助!
Seaborn 的 scatterplot 允许根据变量进行着色和大小调整。这是您的数据类型的样子。
import matplotlib.pyplot as plt
from matplotlib.colors import TwoSlopeNorm
import numpy as np
import seaborn as sns
res = np.array([0.15, 0.04, 0.02, 0.01, -0.03, -0.07, -0.25, -0.27, -0.30])
x = np.arange(len(res))
y = np.ones(len(res))
hue_norm = TwoSlopeNorm(vcenter=0) # to make sure the center color goes to zero
ax = sns.scatterplot(x=x, y=y, hue=res, hue_norm=hue_norm, size=res, sizes=(100, 300), palette='Spectral')
for xi, resi in zip(x, res):
ax.text(xi, 1.1, f'{resi:.2f}', ha='center', va='bottom')
ax.set_ylim(0.75, 2)
ax.set_yticks([])
plt.show()