簡體   English   中英

結合彩色散點圖和單獨的線圖

[英]Combining colored scatter plot and separate line plot

我正在嘗試使用seaborn組合散點圖和線圖(因為它似乎是跨類別使用seaborn圖的一種巧妙方式)。

目前,我有兩個數據集存儲為pandas DataFrames: linear_data用於線性情況, scatter_data用於散點圖數據。 我可以創建兩個單獨的圖:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

# creating a nice color palette with 10 different colors
color_palette=sns.diverging_palette(10, 130, sep=100, n=10)

N=300
scatter_data = pd.DataFrame({'x' : np.random.random(N)*10, 'y' : 
np.random.random(N)*100, 'score' : np.random.randint(1,10,N)})

# create linear plot for linear_data

lin_dict = {0.1: 51.98384470434041,
 0.25: 69.9192341826548,
 0.5: 83.48683256238559,
 1.0: 97.05443094211638,
 2.0: 110.62202932184718,
 3.0: 118.5585655988348,
 4.0: 124.18962770157796,
 5.0: 128.55741880016157,
 6.0: 132.1261639785656,
 7.0: 135.1434950339544,
 8.0: 137.75722608130874,
 9.0: 140.06270025555324,
 10.0: 142.12501717989235}

linear_data = pd.DataFrame.from_dict(lin_dict, orient='index').sort_index(); 
linear_data.index.name='x'; linear_data.columns = ['y']
ax = sns.pointplot(x=linear_data.index, y=linear_data['y'], data=linear_data)

# create scatter plot for scatter_data, having color scheme
#    as in color_palette mapped onto the column 'score' (ranging from 1-10)

fg = sns.FacetGrid(data=scatter_data, hue='score', palette=color_palette, size=5, aspect=1.5)
fg.map(pyplot.scatter, 'x', 'y').add_legend()

散點圖和線圖

所以,我不會分開這兩個,而是希望將它們放在同一個圖中! 我找不到FacetGrid采取任何ax變量,所以不確定如何連接這兩個...

新:正如評論中所提到的,我希望linear_data的點位於較低的散點圖中,但是使用互連這些點的線 (顯然顏色與散點圖中使用的顏色不同,例如黑色)

解決這個問題的任何線索?

您可以使用通常的plt.plot將“linear_data”繪制為與“scatter_data”相同的軸。

fg = sns.FacetGrid(data=scatter_data, hue='score', 
                                      palette=color_palette, size=5, aspect=1.5)
fg.map(plt.scatter, 'x', 'y').add_legend()
fg.axes[0,0].plot(linear_data.index, linear_data['y'], marker="o")
plt.show()

在此輸入圖像描述

如果沒有明確地使用FacetGrid,可以實現同樣的目的,而不是lmplot

fg = sns.lmplot(x = 'x',y= 'y', data=scatter_data, hue='score', 
                                palette=color_palette,fit_reg=False )
fg.axes[0,0].plot(linear_data.index, linear_data['y'], marker="o")
plt.show()

最后,你根本不需要任何seaborn情節,只是matplotlib scatter和matplotlib plot (唯一的缺點是添加一個圖例是更多的工作。)

color_palette=sns.diverging_palette(10, 130, sep=100, n=10, as_cmap=True)
plt.scatter(scatter_data.x, scatter_data.y, c=scatter_data.score, cmap=color_palette)
plt.plot(linear_data.index, linear_data['y'], marker="o")
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM