Show scatter plot title from column value

﹥>﹥吖頭↗ 提交于 2021-01-04 06:36:54

问题


I'm making automatic scatterplot charting with regression from my dataframe example

I want to make correlation between Column2 to Column3 and Column2 to Column4 in separate scatter plot group by Column1. For example, there will be 3 scatter plot of Column2 to Column3 each with the title of A, B, and C

For the plotting I'm using pandas scatter plot for example:

df.groupby('Column1').plot.scatter(x='Column2',y='Column3')

Scatter plot return exactly 3 plot, but I want to know how to add chart title based on grouping from Column1 and also how to add the regression line. I haven't use seaborn or matplotlib yet because it's quite confusing for me, so I appreciate if you can explain more :))

EDIT 1

Sorry for not being clear before. My code previously running fine but with output like this.

It's ok but hard to look at which plot belong to which group. Hence my intention is to create something like this

EDIT 2

Shoutout to everyone who are kindly helping. Caina especially helped me a lot, shoutout to him also.

This is the code he write based on several addition on the comment.

fig, axes = plt.subplots(1, df.Column1.nunique(), figsize=(12,8))

groups = df.groupby('Column1')
fig.tight_layout(pad=3)

# If `fig.tight_layout(pad=3)` does not work:
# plt.subplots_adjust(wspace=0.5) 

for i, (gname, gdata) in enumerate(groups):
    sns.regplot(x='Column2', y='Column3', data=gdata, ax=axes[i])
    axes[i].set_title(gname)
    axes[i].set_ylim(0,)

And this is my result plot

The title and the axis works beautifully. This thread can be considered closed as I got the help for the plot.

But as you can see, the bottom plot is in weird presentation as it also display the x axis from 0 to 600 and y from 0 to 25 although all of them should have same y axis format. For the other chart they are also stretched horizontally.

I'm trying to use the method here but not really successful with parameter square or equal

Can I ask for further on how to adjust the axis so the plot will be a square?Thank you!


回答1:


You can iterate over your groups, specifying the title:

fig, axes = plt.subplots(1, df.Column1.nunique(), figsize=(12,8))

groups = df.groupby('Column1')

for i, (gname, gdata) in enumerate(groups):
    sns.regplot(x='Column2', y='Column3', data=gdata, ax=axes[i]).set_title(gname)

You can also use seaborn.FacetGrid directly:

g = sns.FacetGrid(df, col='Column1')
g.map(sns.regplot, 'Column2', 'Column2')

Edit (further customization based on new requirements in comments):

fig, axes = plt.subplots(1, df.Column1.nunique(), figsize=(12,8))

groups = df.groupby('Column1')
fig.tight_layout(pad=3)

# If `fig.tight_layout(pad=3)` does not work:
# plt.subplots_adjust(wspace=0.5) 

for i, (gname, gdata) in enumerate(groups):
    sns.regplot(x='Column2', y='Column3', data=gdata, ax=axes[i])
    axes[i].set_title(gname)
    axes[i].set_ylim(0,)



回答2:


You can also use the seaborn in-built functionality. If you want to see the correlation you can just do df.corr().

import seaborn as sns
sns.heatmap(df.corr(),annot=True) # This is HeatMap

You can also use pairplot.

sns.set_style('whitegrid')
sns.set(rc={'figure.figsize':(13.7,10.27)})
sns.set(font_scale=1.3)
sns.set_palette("cubehelix",8)
sns.pairplot(df)




回答3:


Here's what I did. You can try something like this.

fig, axes = plt.subplots(ncols=3,figsize=(12,6))
plt.subplots_adjust(wspace=0.5, hspace=0.3)
df.groupby('Column1').plot.scatter(x='Column2',y='Column3',color="DarkBlue",ax=axes[0])
axes[0].set_title("A")
df.groupby('Column1').plot.scatter(x='Column2',y='Column3',color="DarkBlue",ax=axes[1])
axes[1].set_title("B")
df.groupby('Column1').plot.scatter(x='Column2',y='Column3',color="DarkBlue",ax=axes[2])
axes[2].set_title("C")
plt.show()

The output of this is:

If you want to see the answers vertically, then change ncols to nrows and fix the figsize.

fig, axes = plt.subplots(nrows=3,figsize=(3,12))
plt.subplots_adjust(wspace=0.2, hspace=.5)
df.groupby('Column1').plot.scatter(x='Column2',y='Column3',color="DarkBlue",ax=axes[0])
axes[0].set_title("A")
df.groupby('Column1').plot.scatter(x='Column2',y='Column3',color="DarkBlue",ax=axes[1])
axes[1].set_title("B")
df.groupby('Column1').plot.scatter(x='Column2',y='Column3',color="DarkBlue",ax=axes[2])
axes[2].set_title("C")
plt.show()

This will give you:



来源:https://stackoverflow.com/questions/65494750/show-scatter-plot-title-from-column-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!