Using seaborn, how can I draw a line of my choice

2020-07-02 10:43发布

I want to be able to draw a line of my specification across a plot generated in seaborn. The plot I chose was JointGrid, but any scatterplot will do. I suspect that seaborn maybe doesn't make it easy to do this?

Here is the code plotting the data (dataframes from the Iris dataset of petal length and petal width):

import seaborn as sns
iris = sns.load_dataset("iris")    
grid = sns.JointGrid(iris.petal_length, iris.petal_width, space=0, size=6, ratio=50)
    grid.plot_joint(plt.scatter, color="g")

enter image description here

If you take this graph from the iris dataset, how can I draw a line of my choice across it? For example, a line of negative slope might separate the clusters, and positive slope might run across them.

2条回答
狗以群分
2楼-- · 2020-07-02 11:16

It appears that you have imported matplotlib.pyplot as plt to obtain plt.scatter in your code. You can just use the matplotlib functions to plot the line:

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")    
grid = sns.JointGrid(iris.petal_length, iris.petal_width, space=0, size=6, ratio=50)
grid.plot_joint(plt.scatter, color="g")
plt.plot([0, 4], [1.5, 0], linewidth=2)

enter image description here

查看更多
一纸荒年 Trace。
3楼-- · 2020-07-02 11:17

By creating a JointGrid in seaborn, you have created three axes, the main ax_joint, and the two marginal axes.

To plot something else on the joint axes, we can access the joint grid using grid.ax_joint, and then create plot objects on there as you would with any other matplotlib Axes object.

For example:

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")    
grid = sns.JointGrid(iris.petal_length, iris.petal_width, space=0, size=6, ratio=50)

# Create your scatter plot
grid.plot_joint(plt.scatter, color="g")

# Create your line plot.
grid.ax_joint.plot([0,4], [1.5,0], 'b-', linewidth = 2)

As an aside, you can also access the marginal axes of a JointGrid in a similar way:

grid.ax_marg_x.plot(...)
grid.ax_marg_y.plot(...)
查看更多
登录 后发表回答