相关疑难解决方法(0)

Matplotlib散点图传奇

我创建了一个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)

我试过换Line2DScatterscatter.Scatter返回错误并scatter更改了图表并返回了错误.

有了scatter,我改为range(10)包含数据点的列表.每个列表包含x,y或z变量.

lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib legend scatter-plot

51
推荐指数
3
解决办法
16万
查看次数

Matplotlib中按列值的颜色

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 matplotlib pandas

31
推荐指数
5
解决办法
6万
查看次数

Python:使用类别和标记大小绘制散点图

我正在尝试用 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)

默认 Pandas 散点图

midwest.plot(kind='scatter', x='area', y='poptotal', ylim=((0, 50000)), xlim=((0., 0.1)))
Run Code Online (Sandbox Code Playgroud)

上面的代码本身不会对不同的类别进行颜色编码,而是如下所示。

在此处输入图片说明

Pandas Groupby + 散点图

但是,我们可以按“状态”对数据框进行分组,然后为每个组(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.

Seaborn 配对图

 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

下面是我们如何深入到每个数据点并在 Matplotlib 中绘制绘图。

fig, ax = plt.subplots()
groups …
Run Code Online (Sandbox Code Playgroud)

python matplotlib ggplot2 pandas seaborn

6
推荐指数
0
解决办法
8686
查看次数

图例按组着色的散点图,无需多次调用plt.scatter

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)

但是我无法找到第二种策略来生成相应图例的方法。我遇到的所有示例都在各个组之间进行迭代,这似乎不理想。我知道我可以手动生成图例,但这又显得太麻烦了。

python scatter matplotlib legend

5
推荐指数
1
解决办法
1万
查看次数

将matplotlib子图图形保存到图像文件

我是新来的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 …

python matplotlib figure

4
推荐指数
1
解决办法
7102
查看次数

Pandas/Pyplot 中的散点图:如何使用不同标记按类别绘制

基于之前的问题: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)

python matplotlib pandas

3
推荐指数
1
解决办法
8488
查看次数

标签 统计

matplotlib ×6

python ×6

pandas ×3

legend ×2

figure ×1

ggplot2 ×1

scatter ×1

scatter-plot ×1

seaborn ×1