python - 如何绘制多年来许多国家人口密度的 3d 散点图?

标签 python plot dataset mplot3d scatter3d

我有 160 个国家的数据集以及每个国家 12 年期间的人口密度。我想以 3D 散点图形式绘制它,但出现此错误:

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

我创建了三个列表 - “年份”、“国家/地区名称”、“人口密度” 但看来我无法做到正确。 这是数据集的示例:

enter image description here

这是我的代码:

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 图有所有年份的散点图。请帮忙!

最佳答案

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)

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

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

你可以通过这段代码来做到这一点

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()

关于python - 如何绘制多年来许多国家人口密度的 3d 散点图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57195383/

相关文章:

c# - 数据表导入行

Python GTK+ 部件名称

python - 如何在 MayaVi 中绘制正确的 3D 轴,就像在 Matplotlib 中找到的那样

python - Django JSONField

python - 从大型数据集逐步构建箱线图

python - 如何使用子图创建 Pandas groupby 图

testing - Unitils 数据集和修改日期

sql - 按每个日期的 ID 和最近的日期连接表

python - 多维 numpy 数组——沿给定轴反转

python - 在数据帧上使用 python 进行快速文本处理