如何创建一个漂亮的一维图形?

3
df = pd.DataFrame({"labels": ["This is a long label", 
                     "And this is also a long label", 
                     "Wow its a label thats pretty long", 
                     "Can you follow the pattern here?"],
                   "values": [2.2, 1.2, 3.0, 4.1]})

在我的实际例子中,我有大约15个标签和值。基于此,我想显示一个单独的轴,在2.2、1.2、3.0和4.1处标记,每个标记都带有相应的标签。我的标签很长,因此我认为它们需要以对角线或其他某种方式显示,以便标签保持清晰可读。

澄清

明确一下,我想要一个单轴,没有图形字段。它将像数字线一样,上面有标尺-2.2,1.2等。还有标签注释这些刻度代表什么。
这是一个非常粗略的想法草图:enter image description here 我正在尝试,但还没有找到用Pandas或Seaborn实现的方法。这是否可能?

你能否添加一张你想要实现的可视化图像,即使只是一些涂鸦,拍照后发给我也行。 - Haleemur Ali
1个回答

4
画散点图,隐藏轴线和X轴,使用annotate函数放置文本。最后,通过调整位置直到对齐正确。
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.xaxis.set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.scatter([0]*len(df), df['values'], marker='d', s=100, c='r')
ax.set_xlim(-0.1,5)
for _, r in df.iterrows():
    ax.annotate(r['labels'], xy=(0.20, r['values']))

vertical number line


太好了!有个问题我正在努力弄清楚……您使用 df 的长度作为轴的长度,但那并不完全正确。我可以在 0-5 范围内有 10 个点,或在 0-100 范围内有 3 个点。 - pitosalas
我没有使用len(df)作为轴的长度。因为我要在y轴上绘制散点图,所以我需要将每个y值与x=0配对。由于有len(df)个y值需要标记,所以我需要x向量为[0]*len(df) - Haleemur Ali
哦,好的,我看错了。那么轴的长度在哪里设置为0-5?我向df添加了一行,结果扩展了显示轴的长度。我不确定。将set_xlim()更改为0,10并没有给我一个更长的轴,这是我预期的...谢谢! - pitosalas
y轴限制根据数据隐式设置。您可以使用set_ylim显式设置它。我将x轴限制设置为(0, 5),以便原点与刻度标签所在的左侧脊柱对齐。 - Haleemur Ali
哇,我印象深刻! - pitosalas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接