Python+Matplotlib繪制帶有對角線的散點圖的示例代碼
效果圖
Matplotlib 是一個用于繪制二維圖形的 Python 庫,提供了一個 pyplot 模塊,用于創(chuàng)建各種類型的圖表。其中一種圖表是散點圖(Scatter Plots),用于展示兩個變量之間的關(guān)系,以及數(shù)據(jù)的分布情況。要繪制散點圖,使用 pyplot.scatter() 函數(shù),接受以下參數(shù):
x, y:表示數(shù)據(jù)點的橫縱坐標,可以是浮點數(shù)或者數(shù)組。
s:表示數(shù)據(jù)點的大小,可以是一個常數(shù)或者一個數(shù)組,單位是點的平方(1 點 = 1/72 英寸)。
c:表示數(shù)據(jù)點的顏色,可以是一個常數(shù)、一個數(shù)組、一個顏色序列或者一個顏色字符串。如果是一個數(shù)組,那么會根據(jù) cmap 參數(shù)來映射顏色;如果是一個顏色序列,那么長度必須和數(shù)據(jù)點相同;如果是一個顏色字符串,那么所有數(shù)據(jù)點都使用該顏色。
marker:表示數(shù)據(jù)點的形狀,可以是一個 MarkerStyle 實例或者一個簡寫字符串。詳細的形狀列表可以參考 matplotlib.markers 文檔。
cmap:表示用于映射顏色的 Colormap 實例或者注冊的顏色圖名稱。如果 c 是 RGB(A) 值,那么該參數(shù)會被忽略。
norm:表示用于將數(shù)據(jù)標準化到 [0, 1] 區(qū)間的 Normalize 實例或者名稱。默認情況下,使用線性標準化,將最小值映射到 0,最大值映射到 1。如果 c 是 RGB(A) 值,那么該參數(shù)會被忽略。
vmin, vmax:當使用標量數(shù)據(jù)并且沒有指定 norm 時,vmin 和 vmax 定義了顏色圖覆蓋的數(shù)據(jù)范圍。默認情況下,顏色圖覆蓋了所有數(shù)據(jù)的值域。
主要:
- 設(shè)置主題:
sns.set_theme(style="white")
- 設(shè)置 Figure 尺寸:
fig.set_size_inches(10, 10)
- 繪制對角線:
ax.plot()
- 繪制散點圖:
ax.scatter()
- 繪制標注:
ax.annotate()
源碼如下
#!/usr/bin/env python # -- coding: utf-8 -- """ Copyright (c) 2022. All rights reserved. Created by C. L. Wang on 2023/6/25 """ import os import seaborn as sns sns.set_theme(style="white") import matplotlib.pyplot as plt import numpy as np from myutils.project_utils import read_excel_to_df from root_dir import DATA_DIR def draw_diagonal_scatter_plots( data_better, data_ref, label_list, min_scale=0.0, max_scale=1.05, x_label="", y_label="", save_name="" ): """ 繪制對角線散點圖 :param data_better: 優(yōu)質(zhì)數(shù)據(jù),數(shù)據(jù)位于右下方 :param data_ref: 對比數(shù)據(jù) :param label_list: 標簽 :param min_scale: 最小范圍 :param max_scale: 最大范圍 :param x_label: x軸描述 :param y_label: y軸描述 :param save_name: 文件存儲 :return: 圖 """ assert len(data_ref) == len(data_better) == len(label_list) fig, ax = plt.subplots() fig.set_size_inches(10, 10) ax.grid(True) ax.plot([min_scale, max_scale], [min_scale, max_scale], ls="--", c=".3") ax.scatter(data_ref, data_better, s=100, edgecolors="black") plt.xlim(min_scale, max_scale) plt.ylim(min_scale, max_scale) plt.xticks(fontsize=15) plt.yticks(fontsize=15) plt.xlabel(x_label, fontsize=20) plt.ylabel(y_label, fontsize=20) for i, txt in enumerate(label_list): if data_ref[i] - data_better[i] > 0.025: ax.annotate(txt, (data_ref[i] * 1.03, data_better[i]), fontsize=10, fontweight='bold') if save_name: # transparent=True assert save_name.endswith("png") or save_name.endswith("jpg") plt.savefig(save_name, bbox_inches='tight', format='png') plt.show() def main(): df = read_excel_to_df(os.path.join(DATA_DIR, "Strategy-v1v2v3v4-TMScore.xls")) data1 = df["m0-score"] data2 = df["max-score"] label_list = df["target"] print(f"data1 : {round(float(np.mean(data1)) * 100, 4)}±{round(float(np.std(data1)), 4)}") print(f"data2 : {round(float(np.mean(data2)) * 100, 4)}±{round(float(np.std(data2)), 4)}") draw_diagonal_scatter_plots(data1, data2, label_list, min_scale=0.35, max_scale=1.05, x_label="Our P.S.P. (TMScore)", y_label="CASP15 SOTA (TMScore)", save_name="img.png") if __name__ == '__main__': main()
到此這篇關(guān)于Python+Matplotlib繪制帶有對角線的散點圖的示例代碼的文章就介紹到這了,更多相關(guān)Python Matplotlib繪制散點圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python腳本提取fasta文件單序列信息實現(xiàn)
這篇文章主要為大家介紹了Python腳本提取fasta文件單序列信息實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07