当前位置: 首页 > 面试题库 >

Pandas/Pyplot中的散点图:如何按类别绘制

闾丘才哲
2023-03-14
问题内容

我正在尝试使用Pandas DataFrame对象在pyplot中制作一个简单的散点图,但是想要一种有效的方式来绘制两个变量,但要用第三列(键)来指定符号。我已经尝试过使用df.groupby的各种方法,但是没有成功。下面是一个示例df脚本。这会根据“ key1”为标记着色,但是我想看到带有“ key1”类别的图例。我靠近吗?谢谢。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.normal(10,1,30).reshape(10,3), index = pd.date_range('2010-01-01', freq = 'M', periods = 10), columns = ('one', 'two', 'three'))
df['key1'] = (4,4,4,6,6,6,8,8,8,8)
fig1 = plt.figure(1)
ax1 = fig1.add_subplot(111)
ax1.scatter(df['one'], df['two'], marker = 'o', c = df['key1'], alpha = 0.8)
plt.show()

问题答案:

你可以使用scatter它,但是这需要为你提供数值key1,并且你不会注意到图例。

最好只plot对像这样的离散类别使用。例如:

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

如果你希望外观看起来像默认pandas样式,则只需rcParams使用pandas样式表进行更新,并使用其颜色生成器即可。(我也略微调整了图例):

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
plt.rcParams.update(pd.tools.plotting.mpl_stylesheet)
colors = pd.tools.plotting._get_standard_colors(len(groups), color_type='random')

fig, ax = plt.subplots()
ax.set_color_cycle(colors)
ax.margins(0.05)
for name, group in groups:
    ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name)
ax.legend(numpoints=1, loc='upper left')

plt.show()


 类似资料:
  • 我正在寻找一种方法来画两条水平线在一个PlolyScatter图。我的x轴指数不固定,每次都在变化。所以我要找一条在y=5和y=18水平穿过图表的水平线 我在这里寻找解决方案,但不确定如何将布局与Plotly express一起使用 我的散点图代码:

  • 问题内容: 在Python中,使用Matplotlib,一个带有空圆的散点图怎么可能是 密谋?我们的目标是在一些彩色磁盘周围画一个空圆圈 已经被“scatter()”绘制,以便突出显示,理想情况下没有 不得不重新画彩色圆圈。 我试过“facecolors=None”,但没用。 问题答案: From the documentation for scatter: Try the following:

  • 我有一个带符号值的pyplot极坐标散点图。Pyplot做了“正确”的事情,只创建一个正轴,然后反射负值,使其看起来像180度以外的正值。 但是,默认情况下,pyplot使用相同的颜色打印所有点。所以正负值是无法区分的。 我想很容易区分角度x的正值和角度(x/-180)的负值,正值为红色,负值为蓝色。 我在为这种情况创建一个非常简单的彩色地图方面没有取得任何进展。 帮助

  • 我试图用Plotly在一页上绘制10个散点图。然而,我注意到,如果创建了8个以上的绘图,有些绘图会显示一个皱着眉头的正方形。我读到这意味着Chrome无法呈现图表。 图表有多复杂并不重要。即使是9个基本图表也会导致一个不能渲染。例如,请参阅下面复制问题的代码: https://codepen.io/ceds/pen/wvrGoLa HTML JS 你知道怎么过去吗?

  • 我正在绘制一个仪表板,在一个散点图中有多个x特征,每个特征要么显示为直线,要么显示为带标记的直线。 我已经根据我指定的要求构建了散点图,但是,当我在本地运行仪表板时,实际上看不到散点图 这是我写的代码 这是我的数据样本 }

  • 有没有一种惯用的方法来绘制两个类的特征直方图?在熊猫方面,我基本上想要 在同一个情节中。我可以 但这给了我两个不同的情节。 这似乎是一项常见的任务,因此我认为有一种惯用的方法来完成这项任务。当然,我可以手动操作柱状图,使其彼此相邻,但熊猫通常都能很好地做到这一点。 基本上,我希望将这个matplotlib示例放在一行熊猫中:http://matplotlib.org/examples/pylab_