If I use the following code I end up with an overcrowded x-axis. I would like to show only every 10th number on the x axis. Meaning [0,10,...].
Any idea how to do this?
import pandas as pd
import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
a = pd.DataFrame({'y':np.random.randn(100)})
a['time']=a.index
ax = sns.pointplot(x='time', y="y", data=a)
plt.show()
You may decide not to use a pointplot at all. A usual lineplot seems to suffice.
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
a = pd.DataFrame({'y':np.random.randn(100)})
plt.plot(a.index, a.y)
plt.show()
Now this gives ticks at steps of 20. The easiest option here would be to use
plt.xticks(range(0,101,10))
to get the steps of 10. Or equally possible,
plt.gca().locator_params(nbins=11)
to devide the axis into 11 bins.
Of course the use of an appropriate locator would be equally possible.
Related
I want to add an additional variable to the plot listed below. At the moment I have a different colour of marker corresponding to a different metal. But for every metal, there is a different geometry, so I would like to add a marker for every colour (e.g. red dot and red square). When I add "style=POM" I get this error message:
ValueError: Could not interpret value POM for parameter style
Any help on this would be appreciated!
Example .csv file:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.pyplot as plt
dfdata=pd.read_csv('C:/Users/2586376t/conda/BOTH.csv')
sns.jointplot(data=dfdata, x="MO", y="ORB", hue="METAL")
plt.show()
style=POM tries to set the parameter style to POM. In seaborn jointplot, the style parameter does not exist
Ref : https://seaborn.pydata.org/generated/seaborn.jointplot.html
If you want 1 plot with different colors corresponding to different metals and different markers corresponding to different POM values then your solution is to use a scatterplot like this :
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.pyplot as plt
dfdata=pd.read_csv('C:/Users/2586376t/conda/BOTH.csv')
plot = sns.scatterplot(data=dfdata, x="MO", y="ORB", hue="METAL" , style=dfdata['POM'])
plt.show()
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt("traffic.csv", delimiter=',', encoding="utf8",dtype=None)
plt.hist(data[1:,2])
plt.show()
So, basically it overlaps, and I want it to be simplified.
csv link
You can use MaxNLocator to set the maximum number of ticks that will fit on nicely.
Is it possible to format the tick labels in a pandas.DataFrame.plot() without importing the matplotlib.ticker library?
I've come to realise that pandas has many native functions I'm unaware of and I like to use them where possible — if only to simplify my code. And yes, pandas leans on matplotlib anyway, but I want to know to what extent I can style plots without directly invoking matplotlib functions.
For example, can I change the tick labels on this chart to percentages without matplotlib.ticker.Percentformatter()?
import pandas as pd
import numpy as np
import matplotlib as plt
df = pd.DataFrame(columns=["value"], data=np.random.rand(5))
ax = df.plot.barh()
ax.xaxis.set_major_formatter(plt.ticker.PercentFormatter(1))
plt.show()
You can set a custom function as a string formatter with set_major_formatter.
For example:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(columns=["value"], data=np.random.rand(5))
ax = df.plot.barh()
func = lambda x, pos: f"{int(x*100)}%"
ax.xaxis.set_major_formatter(func)
plt.show()
I am creating a joyplot using joypy.
All my data is between[0,1].
But I get a big range of negative values in the graph:
import joypy
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import cm
import matplotlib.ticker as ticker
import matplotlib
matplotlib.use('TkAgg')
iris = pd.read_csv("1_5.csv")
fig, axes = joypy.joyplot(iris)
x = [0,0.25,0.5,0.75,1]
plt.xticks(x)
plt.show()
It isn't clear that your xticks are in any way tied to the actual joyplot itself (ie, you've created arbitrary x-ticks and placed them on the plot).
Are tick marks not represented on the plot originally (similar plots I've seen all have them by default)?
i am having some trouble with a seaborn pointplot.
I am to plot the Temperature vs. growth rate of four kinds of bacteria, so that each type has its own graph, but all four are in the same plot. The thing is, i cannot connect the individual points, i can only get the individual points.
My code:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats, integrate
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
dataSorted=data.sort_values(['Temperature','Growth_rate'],ascending=[True,True])
plt.subplots()
ax2=sns.pointplot(x='Temperature',y='Growth_rate', hue='Bacteria' ,data=dataSorted,scale=0.7,join=True)
axes2=ax2.axes
axes2.set_xlim(10,60)
axes2.set_ylim(0,1.5)
axes2.set_xticks(np.arange(1,7)*10)
axes2.set_xticklabels(np.arange(1,7)*10)
The output is exactly as specified, apart from the lines between points:
My plot - without lines
I have no idea how to fix this, i have even set the "join" parameter manually, even though it is set as True by default.