Python中带有色调颜色贴图和图例的3D散点图
我一直在用seaborn用python搜索3D绘图,但没有看到任何。我想3D打印我最初使用seaborn pairplot绘制的数据集。有人能帮我解决以下两个问题吗:Python中带有色调颜色贴图和图例的3D散点图,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我一直在用seaborn用python搜索3D绘图,但没有看到任何。我想3D打印我最初使用seaborn pairplot绘制的数据集。有人能帮我解决以下两个问题吗: 我无法获得与sns pairplot相同的调色板,例如,如何从图2获得调色板并应用于图1上的点 图例不粘在绘图上或在pairplot上显示不好,例如,当我执行plt.legend时(bbox_to_anchor=(1.05,1),loc=2,borderaxespad=0,ncol=4)我看到以下错误:anaconda2/lib/
plt.legend时(bbox_to_anchor=(1.05,1),loc=2,borderaxespad=0,ncol=4)
我看到以下错误:anaconda2/lib/python2.7/site packages/matplotlib/axes/\u axes.py:545:UserWarning:找不到带标签的对象。在单个绘图上使用label='…'kwarg。warnings.warn(“未找到带标签的对象。”import re, seaborn as sns, numpy as np, pandas as pd, random
from pylab import *
from matplotlib.pyplot import plot, show, draw, figure, cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
sns.set_style("whitegrid", {'axes.grid' : False})
fig = plt.figure(figsize=(6,6))
ax = Axes3D(fig) # Method 1
# ax = fig.add_subplot(111, projection='3d') # Method 2
x = np.random.uniform(1,20,size=20)
y = np.random.uniform(1,100,size=20)
z = np.random.uniform(1,100,size=20)
ax.scatter(x, y, z, c=x, marker='o')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
图2没有调色板规范,但它看起来像是matplotlib()中的成对定性颜色映射。因此,您需要在3D绘图的代码中使用
cmap
参数和pairplot中的调色板
选项来指定
图例更难。你可以用图例元素制作一个。更好解释
因此,您的代码如下所示(我去掉了未使用的导入):
as_hex()
方法初始化的ListedColorMap
类的实例转换为Matplotlib颜色映射(如中所建议)
散点
函数输出的句柄和标签
ListedColorMap
的输出输出了具有透明度变化的颜色贴图,因此我必须在散点图中将alpha
手动设置为1
导入re,seaborn作为sns
将numpy作为np导入
从matplotlib导入pyplot作为plt
从mpl_toolkits.mplot3d导入Axes3D
从matplotlib.colors导入ListedColormap
#生成数据
n=200
x=np.随机.均匀(1,20,尺寸=n)
y=np.随机.均匀(1100,尺寸=n)
z=np.随机.均匀(1100,尺寸=n)
#轴实例
图=plt.图(图尺寸=(6,6))
ax=Axes3D(图,自动添加到图=假)
图添加_轴(ax)
#从seaborn获取彩色地图
cmap=ListedColormap(sns.color\u调色板(“husl”,256).as\u hex())
#密谋
sc=最大散射(x,y,z,s=40,c=x,marker='o',cmap=cmap,alpha=1)
ax.set_xlabel('X标签')
ax.set_ylabel('Y Label'))
ax.set_zlabel('Z标签')
#传奇
plt.legend(*sc.legend_elements(),bbox_to_anchor=(1.05,1),loc=2)
#拯救
plt.savefig(“散射色调”,bbox\u英寸=紧密”)
#Seaborn pair plot
df_3d = pd.DataFrame()
df_3d['x'] = x
df_3d['y'] = y
df_3d['z'] = z
sns.pairplot(df_3d, hue='x')
import seaborn as sns, numpy as np, pandas as pd, random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
sns.set_style("whitegrid", {'axes.grid' : False})
fig = plt.figure(figsize=(6,6))
ax = Axes3D(fig)
x = np.random.uniform(1,20,size=20)
y = np.random.uniform(1,100,size=20)
z = np.random.uniform(1,100,size=20)
g = ax.scatter(x, y, z, c=x, marker='o', depthshade=False, cmap='Paired')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
# produce a legend with the unique colors from the scatter
legend = ax.legend(*g.legend_elements(), loc="lower center", title="X Values", borderaxespad=-10, ncol=4)
ax.add_artist(legend)
plt.show()