有没有办法调整 matplot 散点图中的注释?

发布于 2025-01-15 21:25:36 字数 2603 浏览 1 评论 0原文

目前,我很难在散点图中移动注释以获得更好的可读性。 这是我的代码:

    for line in range(0, data_wald_nan.shape[0]):
        fig.text(data_wald_nan.Wald_Schools_Per_Million.iloc[line] + 0.01, data_wald_nan.vaxx_rate.iloc[line],
                data_wald_nan.country.iloc[line], horizontalalignment='left',
                size='medium', color='black', weight='semibold')

我尝试使用调整文本,但这只是绘制了太多的红色箭头:

    for x,y,s in zip(data_wald_nan[independend_variable], data_wald_nan["vaxx_rate"], data_wald_nan["country"]):
        texts.append(plt.text(x, y, s))
        adjust_text(texts, only_move={'points': 'y', 'texts': 'y'}, 
    arrowprops=dict(arrowstyle="->", color='r', lw=0.5))
    plt.show()

这是代码 1 的输出: 输入图片此处描述

这是代码 2 的输出: 输入图片此处描述

编辑:简约代码:

import scipy.stats
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from adjustText import adjust_text

def scatter(independend_variable):
    data = pd.read_csv("RQ1_final.csv")

    data_wald_nan = pd.read_csv("RQ1_final.csv")
    colors = np.arange((len(data_wald_nan["vaxx_rate"])))
    print(data_wald_nan)
    r = [scipy.stats.pearsonr(x=data_wald_nan["vaxx_rate"], y=data_wald_nan[independend_variable])]
    print()
    y = data_wald_nan["vaxx_rate"]
    x = data_wald_nan[independend_variable]
    fig = sns.scatterplot(data=data_wald_nan, y="vaxx_rate", x=independend_variable, c = colors)
    fig.set_title( "Gross domestic product and \n vaccination rate "
                                             "in countries \n (correlation-coefficient: " + str(r) +
                 ")", weight="bold")
    fig.set_ylabel("Vaccination Rate in %")
    fig.set_xlabel("Gross domestic product")

    for line in range(0, data_wald_nan.shape[0]):
        fig.text(data_wald_nan.GDP.iloc[line] + 0.01, data_wald_nan.vaxx_rate.iloc[line],
                data_wald_nan.country.iloc[line], horizontalalignment='left',
                size='medium', color='black', weight='semibold')
        adjust_text(fig.texts,only_move={'points': 'y', 'texts': 'y'}, arrowprops=dict(arrowstyle="->", color='r', lw=0.5))
    fig.set_ylim(ymin=0, ymax=100)
    fig.set_xlim(xmin=5000,xmax=100000)
    plt.grid(visible=True, color="grey", linestyle="-", linewidth=0.5, alpha=0.2)
    plt.show()
scatter("GDP")

Currently I struggle to move the annotations in a scatterplot for better readability.
This is my code:

    for line in range(0, data_wald_nan.shape[0]):
        fig.text(data_wald_nan.Wald_Schools_Per_Million.iloc[line] + 0.01, data_wald_nan.vaxx_rate.iloc[line],
                data_wald_nan.country.iloc[line], horizontalalignment='left',
                size='medium', color='black', weight='semibold')

I tried using adjust text but this just draws way too much red arrows:

    for x,y,s in zip(data_wald_nan[independend_variable], data_wald_nan["vaxx_rate"], data_wald_nan["country"]):
        texts.append(plt.text(x, y, s))
        adjust_text(texts, only_move={'points': 'y', 'texts': 'y'}, 
    arrowprops=dict(arrowstyle="->", color='r', lw=0.5))
    plt.show()

This is the Output of Code 1:
enter image description here

And this the Output of Code 2:
enter image description here

EDIT: minimalistic code:

import scipy.stats
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from adjustText import adjust_text

def scatter(independend_variable):
    data = pd.read_csv("RQ1_final.csv")

    data_wald_nan = pd.read_csv("RQ1_final.csv")
    colors = np.arange((len(data_wald_nan["vaxx_rate"])))
    print(data_wald_nan)
    r = [scipy.stats.pearsonr(x=data_wald_nan["vaxx_rate"], y=data_wald_nan[independend_variable])]
    print()
    y = data_wald_nan["vaxx_rate"]
    x = data_wald_nan[independend_variable]
    fig = sns.scatterplot(data=data_wald_nan, y="vaxx_rate", x=independend_variable, c = colors)
    fig.set_title( "Gross domestic product and \n vaccination rate "
                                             "in countries \n (correlation-coefficient: " + str(r) +
                 ")", weight="bold")
    fig.set_ylabel("Vaccination Rate in %")
    fig.set_xlabel("Gross domestic product")

    for line in range(0, data_wald_nan.shape[0]):
        fig.text(data_wald_nan.GDP.iloc[line] + 0.01, data_wald_nan.vaxx_rate.iloc[line],
                data_wald_nan.country.iloc[line], horizontalalignment='left',
                size='medium', color='black', weight='semibold')
        adjust_text(fig.texts,only_move={'points': 'y', 'texts': 'y'}, arrowprops=dict(arrowstyle="->", color='r', lw=0.5))
    fig.set_ylim(ymin=0, ymax=100)
    fig.set_xlim(xmin=5000,xmax=100000)
    plt.grid(visible=True, color="grey", linestyle="-", linewidth=0.5, alpha=0.2)
    plt.show()
scatter("GDP")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文