Scatter Plot With String X And Y Coordinates
I did see this, but I was wondering if there is a way to do it without pandas. This is what I have tried. X_AXIS, and Y_AXIS are strings that are contained in xTickMarks and yTickM
Solution 1:
You need numbers for the scatter plot. You can map your string values to numbers and then set the ticks to match the mapping.
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X_AXIS = ['1B', '2B', '2B', '1B3S']
Y_AXIS = ['0S', '0S', '2S', '2S']
Z_AXIS = [1.5637257394958113, 1.5399805470086181, 1.4030363999998978, 1.4198133749999822]
FREQ = [5000000.] * 4
xTickMarks = ["0B", "1B", "2B", "1B3S", "2B2S"]
yTickMarks = ["-1S","0S", "1S", "2S", "3S", "4S"]
matplotlib.rc('font', serif='Helvetica Neue')
matplotlib.rc('text', usetex='false')
matplotlib.rcParams.update({'font.size': 10})
fig = plt.figure(figsize=(11.69,4.88)) # for landscape
axes1 = fig.add_subplot(111)
'''
Tuple of big,small cores with a tuple of power.
let x be big core
let y be small core
let z be Power
'''
plt.grid(True,linestyle='-',color='0.75')
x = [xTickMarks.index(i) for i in X_AXIS]
y = [yTickMarks.index(i) for i in Y_AXIS]
z = Z_AXIS
s = [int(FREQ[i])/1000000.0for i inrange(len(FREQ))]
plt.scatter(x,y,s=s,c=z, marker = 'o', cmap = cm.jet )
cb = plt.colorbar()
cb.set_label('Frequency', fontsize=20)
axes1.set_xlim((0, len(xTickMarks)-1))
axes1.set_ylim((0, len(yTickMarks)-1))
axes1.set_xticks(xrange(len(xTickMarks)))
axes1.set_yticks(xrange(len(yTickMarks)))
axes1.set_xticklabels(xTickMarks)
axes1.set_yticklabels(yTickMarks)
axes1.set_ylabel('Small cores')
axes1.set_xlabel('Big cores')
axes1.legend(prop={'size':5}, ncol=4)
axes1.xaxis.grid(True)
figsize=(11.69,8.27) # for landscape#fig.savefig('state-transition.png', bbox_inches='tight', dpi=300, pad_inches=0.1)
plt.show()
What I changed here compared to your code are the values for x and y:
x = [xTickMarks.index(i) for i in X_AXIS]
y = [yTickMarks.index(i) for i in Y_AXIS]
and the ticks of your axes:
axes1.set_xlim((0, len(xTickMarks)-1))
axes1.set_ylim((0, len(yTickMarks)-1))
axes1.set_xticks(xrange(len(xTickMarks)))
axes1.set_yticks(xrange(len(yTickMarks)))
axes1.set_xticklabels(xTickMarks)
axes1.set_yticklabels(yTickMarks)
Hope this helps.
Post a Comment for "Scatter Plot With String X And Y Coordinates"