微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Matplotlib--带有半填充标记的散点图

如何解决Matplotlib--带有半填充标记的散点图

问题:在 matplotlib 中使用散点图,有没有简单的方法可以得到一个半满的标记

我知道使用线图可以轻松完成半填充标记,但我想使用“散点图”,因为我想使用标记大小和颜色(即替代标记面颜色)来表示其他数据。 (我相信使用散点图会更容易,因为我想从大数据集中自动制作大量图。)

我似乎无法使用散点图正确制作半填充标记。也就是说,绘图显示了一半的标记,而不是半填充的标记。我一直在使用 matplotlib.markers.MarkerStyle,但这似乎只能让我做到一半。我可以使用下面的代码获得以下输出

enter image description here

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.markers import MarkerStyle

plt.scatter(1,1,marker=MarkerStyle('o',fillstyle='full'),edgecolors='k',s=500)
plt.scatter(2,2,fillstyle='left'),s=500)
plt.scatter(3,3,fillstyle='right'),s=500)
plt.scatter(4,4,fillstyle='top'),s=500)
plt.scatter(5,5,fillstyle='bottom'),s=500)

plt.show()

解决方法

正如评论中提到的,我不明白你为什么必须使用 plt.scatter 但如果你愿意,你可以伪造一个组合标记:

from matplotlib.markers import MarkerStyle
from matplotlib import pyplot as plt

#data generation
import pandas as pd
import numpy as np
np.random.seed(123)
n = 10
df = pd.DataFrame({"X": np.random.randint(1,20,n),"Y": np.random.randint(10,30,"S": np.random.randint(50,500,"C1": np.random.choice(["red","blue","green"],"C2": np.random.choice(["yellow","grey"],n)})

fig,ax = plt.subplots()

ax.scatter(df.X,df.Y,s=df.S,c=df.C1,edgecolor="black",marker=MarkerStyle("o",fillstyle="right"))
ax.scatter(df.X,c=df.C2,fillstyle="left"))
    
plt.show()

示例输出: enter image description here

当然,这也适用于连续数据:

from matplotlib import pyplot as plt
from matplotlib.markers import MarkerStyle

import pandas as pd
import numpy as np
np.random.seed(123)
n = 10
df = pd.DataFrame({"X": np.random.randint(1,"S": np.random.randint(100,1000,"C1": np.random.randint(1,100,"C2": np.random.random(n)})

fig,ax = plt.subplots(figsize=(10,8))

im1 = ax.scatter(df.X,fillstyle="right"),cmap="autumn")
im2 = ax.scatter(df.X,fillstyle="left"),cmap="winter")
cbar1 = plt.colorbar(im1,ax=ax)
cbar1.set_label("right half",rotation=90)
cbar2 = plt.colorbar(im2,ax=ax)
cbar2.set_label("left half",rotation=90)

plt.show()

示例输出:

enter image description here

But be reminded that plt.plot with marker definitions might be faster for large-scale datasetsThe plot function will be faster for scatterplots where markers don't vary in size or color.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。