我创建了一个4D散点图来表示特定区域的不同温度.创建图例时,图例会显示正确的符号和颜色,但会在其中添加一条线.我正在使用的代码是:
colors=['b', 'c', 'y', 'm', 'r']
lo = plt.Line2D(range(10), range(10), marker='x', color=colors[0])
ll = plt.Line2D(range(10), range(10), marker='o', color=colors[0])
l = plt.Line2D(range(10), range(10), marker='o',color=colors[1])
a = plt.Line2D(range(10), range(10), marker='o',color=colors[2])
h = plt.Line2D(range(10), range(10), marker='o',color=colors[3])
hh = plt.Line2D(range(10), range(10), marker='o',color=colors[4])
ho = plt.Line2D(range(10), range(10), marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),numpoints=1, loc='lower left', ncol=3, fontsize=8)
Run Code Online (Sandbox Code Playgroud)
我试过换Line2D
到Scatter
和scatter
.Scatter
返回错误并scatter
更改了图表并返回了错误.
有了scatter
,我改为range(10)
包含数据点的列表.每个列表包含x,y或z变量.
lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, …
Run Code Online (Sandbox Code Playgroud) ggplot2
在R 中使用库我最喜欢的一个方面是能够轻松指定美学.我可以快速制作一个散点图并应用与特定列关联的颜色,我希望能够使用python/pandas/matplotlib执行此操作.我想知道是否有任何便利功能,人们用它来使用pandas数据帧和Matplotlib将颜色映射到值?
##ggplot scatterplot example with R dataframe, `df`, colored by col3
ggplot(data = df, aes(x=col1, y=col2, color=col3)) + geom_point()
##ideal situation with pandas dataframe, 'df', where colors are chosen by col3
df.plot(x=col1,y=col2,color=col3)
Run Code Online (Sandbox Code Playgroud)
编辑:感谢您的回复,但我想包含一个示例数据框,以澄清我的要求.两列包含数字数据,第三列是分类变量.我想的脚本将根据此值指定颜色.
import pandas as pd
df = pd.DataFrame({'Height':np.random.normal(10),
'Weight':np.random.normal(10),
'Gender': ["Male","Male","Male","Male","Male",
"Female","Female","Female","Female","Female"]})
Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Python从这里选择一个 R ggplot2 图。我正在查看相关散点图,如下所示。
import pandas as pd
midwest= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest.csv")
Run Code Online (Sandbox Code Playgroud)
midwest.plot(kind='scatter', x='area', y='poptotal', ylim=((0, 50000)), xlim=((0., 0.1)))
Run Code Online (Sandbox Code Playgroud)
上面的代码本身不会对不同的类别进行颜色编码,而是如下所示。
但是,我们可以按“状态”对数据框进行分组,然后为每个组(ref)单独绘制散点图。
fig, ax = plt.subplots()
groups = midwest.groupby('state')
for name, group in groups:
ax.plot(group.area, group.poptotal, marker='o', linestyle='', ms=10,
label=name)
ax.legend(numpoints=1)
ax.set_ylim((0, 500000))
Run Code Online (Sandbox Code Playgroud)
虽然这确实让我们在散点图中得到了不同的类别,但它并没有让它们的大小增加popdensity
.
import seaborn as sns
sns.pairplot(x_vars=["area"], y_vars=["poptotal"], data=midwest,
hue="state", size=5)
plt.gca().set_ylim((0, 50000))
Run Code Online (Sandbox Code Playgroud)
同样,这仅按类别绘制散点图。但是,我们仍然没有标记大小popdensity
下面是我们如何深入到每个数据点并在 Matplotlib 中绘制绘图。
fig, ax = plt.subplots()
groups …
Run Code Online (Sandbox Code Playgroud) pyplot.scatter
允许传递到c=
与组相对应的数组,然后将根据这些组为点着色。但是,这似乎不支持不单独绘制每个组而生成图例。
因此,例如,可以通过遍历各组并分别绘制每个图来生成带有彩色组的散点图:
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
feats = load_iris()['data']
target = load_iris()['target']
f, ax = plt.subplots(1)
for i in np.unique(target):
mask = target == i
plt.scatter(feats[mask, 0], feats[mask, 1], label=i)
ax.legend()
Run Code Online (Sandbox Code Playgroud)
会产生:
我可以实现类似外观的情节而无需遍历每个组:
f, ax = plt.subplots(1)
ax.scatter(feats[:, 0], feats[:, 1], c=np.array(['C0', 'C1', 'C2'])[target])
Run Code Online (Sandbox Code Playgroud)
但是我无法找到第二种策略来生成相应图例的方法。我遇到的所有示例都在各个组之间进行迭代,这似乎不理想。我知道我可以手动生成图例,但这又显得太麻烦了。
我是新来的matplotlib
,正在lim步。就是说,我没有找到这个问题的明显答案。
我有一个散点图,希望按组进行着色,看起来像通过循环绘制是滚动的方式。
这是我的可复制示例,基于上面的第一个链接:
import matplotlib.pyplot as plt
import pandas as pd
from pydataset import data
df = data('mtcars').iloc[0:10]
df['car'] = df.index
fig, ax = plt.subplots(1)
plt.figure(figsize=(12, 9))
for ind in df.index:
ax.scatter(df.loc[ind, 'wt'], df.loc[ind, 'mpg'], label=ind)
ax.legend(bbox_to_anchor=(1.05, 1), loc=2)
# plt.show()
# plt.savefig('file.png')
Run Code Online (Sandbox Code Playgroud)
取消注释会plt.show()
产生我想要的东西:
到处搜索,看起来就像plt.savefig()
是保存文件的方式。如果我重新注释掉plt.show()
并plt.savefig()
改为运行,则会得到空白的白色图片。这个问题,暗示这是由于show()
之前致电引起的savefig()
,但我已将其完全注释掉了。另一个问题有一条评论,建议我可以ax
直接保存该对象,但这切断了我的图例:
相同的问题也有替代方法使用fig.savefig()
。我得到同样的传说。
有这个问题,这似乎有关,但我不密谋DataFrame
直接,所以我不知道如何应用答案(这里dtf …
基于之前的问题:ScatterplotsinPandas/Pyplot:Howtoplotbycategory。
下面的代码是该帖子的解决方案,并将每个组绘制为不同的颜色。如何将每一组绘制为不同的标记?
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
np.random.seed(1974)
# Generate Data
num = 20
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))
groups = df.groupby('label')
# Plot
fig, ax = plt.subplots()
ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling
for name, group in groups:
ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name)
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud) matplotlib ×6
python ×6
pandas ×3
legend ×2
figure ×1
ggplot2 ×1
scatter ×1
scatter-plot ×1
seaborn ×1