Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Scatter Plot with Multiple Y values for each X

Tags:

I am trying to use Python to create a scatter plot that contains two X categories "cat1" "cat2" and each category has multiple Y values. I can get this to work if the number of Y values for each X value is the same by using this following code:

    import numpy as np     import matplotlib.pyplot as plt      y = [(1,1,2,3),(1,1,2,4)]     x = [1,2]     py.plot(x,y)     plot.show() 

but as soon as the number of Y values for each X value is not the same, I get an error. For example this does not work:

    import numpy as np     import matplotlib.pyplot as plt      y = [(1,1,2,3,9),(1,1,2,4)]      x = [1,2]     plt.plot(x,y)     plot.show()     #note now there are five values for x=1 and only four for x=2. error 

How can I plot different numbers of Y values for each X value and how can I change the X axis from being the numbers 1 and 2 to text categories "cat1" and "cat2". I would greatly appreciate any help on this!

Here is a sample image of the type of plot I am trying to make:

http://s12.postimg.org/fa417oqt9/pic.png

like image 519
mangoplant Avatar asked Dec 15 '15 03:12

mangoplant


People also ask

How do you plot multiple Y axis in Python?

Using subplots() method, create a figure and a set of subplots. Plot [1, 2, 3, 4, 5] data points on the left Y-axis scales. Using twinx() method, create a twin of Axes with a shared X-axis but independent Y-axis, ax2. Plot [11, 12, 31, 41, 15] data points on the right Y-axis scale, with blue color.


1 Answers

How can I plot different numbers of Y values for each X value

Just plot each group separately:

for xe, ye in zip(x, y):     plt.scatter([xe] * len(ye), ye) 

and how can I change the X axis from being the numbers 1 and 2 to text categories "cat1" and "cat2".

Set ticks and tick labels manually:

plt.xticks([1, 2]) plt.axes().set_xticklabels(['cat1', 'cat2']) 

Full code:

import matplotlib.pyplot as plt import numpy as np  y = [(1,1,2,3,9),(1,1,2,4)] x = [1,2]  for xe, ye in zip(x, y):     plt.scatter([xe] * len(ye), ye)  plt.xticks([1, 2]) plt.axes().set_xticklabels(['cat1', 'cat2'])  plt.savefig('t.png') 

enter image description here

like image 94
fjarri Avatar answered Oct 22 '22 15:10

fjarri