【问题标题】:matplotlib: change marker color based on label valuematplotlib:根据标签值更改标记颜色
【发布时间】:2018-07-08 19:45:27
【问题描述】:

我正在绘制一个 3D 散点图,并打算根据 y 轴(国家)标签的值为每个标记赋予不同的颜色。我有以下代码。标记的颜色不是它们需要的颜色。我认为我在 for 循环中做错了什么或效率低下。你能指出我犯的错误吗?

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np    

src = ['facebook', 'google', 'amazon','facebook','facebook','google']
year = [2014,2014,2013,2013,2012,2013]
country = ['uk','ru','de','us','uk','us']
avg = [154,267,187,312,274,439]
colors = {'uk' : 'b',
          'de' : 'y',
          'ru' : 'r', 
          'us' : 'c'}

unique_src, idx_src = np.unique(src, return_inverse=True)
unique_cty, idx_cty = np.unique(country, return_inverse=True)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for col, val in zip(colors, country):
    ax.scatter(idx_src, idx_cty, year, s=avg, c=colors[val])
plt.yticks(range(len(unique_cty)), unique_cty, rotation=340)
plt.xticks(range(len(unique_src)), unique_src, rotation=45, horizontalalignment='right')
ax.set_zticks(np.unique(year))
plt.show()

另外,调用scatter函数的时候,不能写:
ax.scatter(source, country, year, s=avg, c=colors[val])

当我收到以下错误消息时:

ValueError:无法将字符串转换为浮点数:facebook

为什么会这样?我正在使用 matplotlib 2.1.2 版

【问题讨论】:

标签: python python-2.7 matplotlib scatter-plot scatter3d


【解决方案1】:

您似乎想按国家/地区对点进行着色。

c = [colors[val] for val in country]
ax.scatter(idx_src, idx_cty, year, s=avg, c=c)

完整示例:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np    

src = ['facebook', 'google', 'amazon','facebook','facebook','google']
year = [2014,2014,2013,2013,2012,2013]
country = ['uk','ru','de','us','uk','us']
avg = [154,267,187,312,274,439]
colors = {'uk' : 'b',
          'de' : 'y',
          'ru' : 'r', 
          'us' : 'c'}

unique_src, idx_src = np.unique(src, return_inverse=True)
unique_cty, idx_cty = np.unique(country, return_inverse=True)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

c = [colors[val] for val in country]
ax.scatter(idx_src, idx_cty, year, s=avg, c=c)

plt.yticks(range(len(unique_cty)), unique_cty, rotation=340)
plt.xticks(range(len(unique_src)), unique_src, rotation=45, horizontalalignment='right')
ax.set_zticks(np.unique(year))
plt.show()

【讨论】:

  • 我可以知道如何绘制指示国家及其相关颜色的图例吗?
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多