Issue
I have a plot with 2 x_labels for two subplots. The inner x label is "Bronx, Brooklyn, Manhanttan, Queens, Staten Island"(or is it call x tick?), the outer x label is "borough":
I want to find two different solutions to handle the "borough" labels.
- Remove both "borough" label from the graph.
- Keep 1 "borough" in the center of the two subplots.
The sample data is follow:
borough | total_person_injured | total_person_killed |
---|---|---|
QUEENS | 1000 | 1000 |
QUEENS | 2000 | 2000 |
BROOKLYN | 1000 | 1000 |
BRONX | 1000 | 1000 |
MANHATTAN | 1000 | 1000 |
STATEN ISLAND | 1000 | 1000 |
The code to generate the original plot is
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
df = pd.read_csv ("C:/file.csv")
fig, ax = plt.subplots (1,2)
plt.suptitle ("Collision injured verus killed per boroughs")
df_injured_killed = df.groupby ("borough")[["total_person_injured", "total_person_killed"]].sum()
ax[0].set_xticklabels (labels = df_injured_killed.index, rotation = 45)
ax[1].set_xticklabels (labels = df_injured_killed.index, rotation = 45)
# Future code will be add here
sb.barplot (x = df_injured_killed.index, y = df_injured_killed["total_person_injured"], ax = ax[0])
sb.barplot (x = df_injured_killed.index, y = df_injured_killed["total_person_killed"], ax = ax[1])
I had tried
ax[0].set_xlabel("")
ax[1].set_xlabel("")
and
ax[0].set(xlabel=None)
ax[1].set(xlabel=None)
and
fig, ax = plt.subplots (1,2, sharex=True)
Which had no effect on the graph.
I had tried
plt.axis("off")
Which remove inner and outer x labels for the right subplots:
I had tried
ax1 = plt.axes()
x_axis = ax1.axes.get_xaxis()
x_axis.set_visible(False)
Which completely remove the graph from the plot:
I had tried
fig.text(0.5,0.001,"Borough",ha="center")
Which add more label:
Solution
Seaborn's barplot returns an axis-object, you just need to assign it to a variable and then use set
to remove it.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
df = pd.read_csv ("C:/file.csv")
fig, ax = plt.subplots(1, 2)
plt.suptitle("Collision injured verus killed per boroughs")
df_injured_killed = df.groupby("borough")[["total_person_injured", "total_person_killed"]].sum()
ax[0].set_xticklabels(labels=df_injured_killed.index, rotation=45)
ax[1].set_xticklabels(labels=df_injured_killed.index, rotation=45)
# Future code will be add here
plot1 = sb.barplot(x=df_injured_killed.index, y=df_injured_killed["total_person_injured"], ax=ax[0])
plot2 = sb.barplot(x=df_injured_killed.index, y=df_injured_killed["total_person_killed"], ax=ax[1])
plot1.set(xlabel="")
plot2.set(xlabel="")
fig.text(0.5, -0.15, "Borough", ha="center")
I also added sharey=True
to subplots which makes it look a bit cleaner.
Answered By - Rabinzel
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.