当我使用第三个变量定义颜色

时间:2016-06-21 23:48:15

标签: python matplotlib plot colorbar

我尝试使用第三个变量制作彩色散点图来定义颜色。使用以下代码很简单:

plt.scatter(mH, mA, s=1, c=mHc)
plt.colorbar()
plt.show()

但是我没有很多选择来修改情节的框架。我正在尝试以下代码来制作彩色散点图,同时我尝试优化绘图的框架:

import numpy as np
import math
from matplotlib import rcParams
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator

fig, ax = plt.subplots()

cax = ax.scatter(mH,mA,s=0.5,c=mHc) ### mH, mA, mHC are the dataset
fig.colorbar(cax)
minor_locator1 = AutoMinorLocator(6)
minor_locator2 = AutoMinorLocator(6)
ax.xaxis.set_minor_locator(minor_locator1)
ax.yaxis.set_minor_locator(minor_locator2)
ax.tick_params('both', length=10, width=2, which='major')
ax.tick_params('both', length=5, width=2, which='minor')
ax.set_xlabel(r'$m_H$')
ax.set_ylabel(r'$m_A$')
ax.set_xticks([300,600,900,1200,1500])
ax.set_yticks([300,600,900,1200,1500])

plt.savefig('mH_mA.png',bbox_inches='tight')
plt.show()

但我得到的情节是黑白色。看起来问题在于标记大小参数,但我不知道如何纠正它。我想要更小的标记尺寸。任何人都可以给我一些想法来解决这个问题。感谢。enter image description here

1 个答案:

答案 0 :(得分:3)

size=0.5非常小 - 可能你所看到的只是标记轮廓。我建议你增加一点大小,也许可以通过edgecolors="none"来关闭标记边缘笔划:

import numpy as np
from matplotlib import pyplot as plt

n = 10000
x, y = np.random.randn(2, n)
z = -(x**2 + y**2)**0.5

fig, ax = plt.subplots(1, 1)
ax.scatter(x, y, s=5, c=z, cmap="jet", edgecolors="none")

enter image description here

您可能还想尝试使用alpha=参数使点半透明:

ax.scatter(x, y, s=20, c=z, alpha=0.1, cmap="jet", edgecolors="none")

enter image description here

当你有如此大量的重叠点时,很难让散点图看起来很漂亮。我很想将您的数据绘制为2D直方图或等高线图,或者甚至是散点图和等高线图的组合:

density, xe, ye = np.histogram2d(x, y, bins=20, normed=True)
ax.hold(True)
ax.scatter(x, y, s=5, c=z, cmap="jet", edgecolors="none")
ax.contour(0.5*(xe[:-1] + xe[1:]), 0.5*(ye[:-1] + ye[1:]), density,
           colors='k')

enter image description here