首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制多年来许多国家人口密度的三维散点图?

如何绘制多年来许多国家人口密度的三维散点图?
EN

Stack Overflow用户
提问于 2019-07-25 06:11:30
回答 1查看 465关注 0票数 1

我有160个国家的数据和12年期间每个国家的人口密度。我想把它绘制成三维散射图,但是我得到了一个错误:

  • ValueError:太多的值需要解包(预期为3)

我创造了三份名单--“年份”、“国名”、“人口密度”,但似乎我做错了。这是数据集的一个示例:

这是我的密码:

代码语言:javascript
复制
g1 = population_density["year"]
g2 = population_density["country_name"]
g3 = population_density["population_density_(people per sq. km of land area)"]

data = (g1, g2, g3)
colors= list(np.random.choice(range(256), size=160))
groups = ("year", "population density per sq.km", "countries") 

# Create plot
fig = plt.figure(figsize = (10,8))
#ax = Axes3D(fig)
ax = fig.add_subplot(111, projection='3d')
#ax = fig.gca(projection='3d')

for data, color, group in zip(data, colors, groups):
    x, y, z = data
    ax.scatter(x, y, z, alpha=0.8, c=color, edgecolors='none', s=30, label=group)

plt.title('Population Density Over The Years')
plt.legend(loc=2)
plt.show()

最后,我想要这些年的散点图--这个3d图。请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-25 06:59:46

而不是ax.scatter(x, y, z, alpha=0.8, c=color, edgecolors='none', s=30, label=group),代之以ax.scatter(g1, g2, g3, alpha=0.8, c=color, edgecolors='none', s=30, label=group)

您应该用g1替换x,用g2替换y,用g3替换z。根据matplotlib散射三维中的文档,使用的参数可以是数组形式的。通过使用for循环,您将解压列表中的值。

(编辑)在查看数据集之后,在x和y轴上有分类值,但是3d中的散点图需要定义笛卡尔坐标。因此,您可以做的是设置xticksyticks

您可以通过以下代码来完成这一任务

代码语言:javascript
复制
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

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

g1 = population_density["year"]
g2 = population_density["country_name"]
g3 = population_density["population_density_(people per sq. km of land area)"]

data = (g1, g2, g3)
colors= list(np.random.choice(range(256), size=len(g1)))

ax.scatter(g1, range(len(g2)), g3, alpha=0.8, c=colors, edgecolors='none', s=30)

ax.set(xticks=range(len(g1)), xticklabels=g1,
       yticks=range(len(g2)), yticklabels=g2,
       zticks=range(len(g3)), zticklabels=g3)

ax.set_xlabel('year')
ax.set_ylabel('countries')
ax.set_zlabel('population density per sq.km')

plt.title('Population Density Over The Years')
plt.legend(loc=2)
plt.show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57195383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档