I have created a 3D plot using csv data. I would like to log the z-axis however it appears that you can only change the labels, not the actual dimensions of the axis. Please see the script attached below:
enter code here
import matplotlib
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sys
import csv
import bbox
csvFileName = sys.argv[0]
csvData = []
with open('Ben*PAR_nh.csv', 'r') as csvfile:
csvReader = csv.reader(csvfile, delimiter=',')
for csvRow in csvReader:
csvData.append(csvRow)
csvData = np.array(csvData)
csvData = csvData.astype(float)
X, Y, Z = csvData[:,0], csvData[:,1], csvData[:,2]
#change vmin and vmax values for colorbar range
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cb = ax.plot_trisurf(X, Y, Z, cmap='coolwarm', alpha=0.75)
#cb = ax.plot_trisurf(X, Y, Z, cmap='coolwarm', alpha=0.75, vmin=0,
vmax=800)
ax.scatter(X, Y, Z, c='red', marker='o')
fig.colorbar(cb, shrink=0.5)
ax.set_title("First-year sea ice PAR")
ax.set_xlabel("SZA")
ax.set_ylabel("Ice thickness")
ax.set_zlabel("µmol m$^{-2}$ $^{s-1}$")
ax.view_init(azim=70, elev=30)
image_format = 'png' # e.g .png, .svg, etc.
image_name = 'test.eps'
plt.show()
fig.savefig(image_name, format=image_format, dpi=1200)
Thanks to Jamie's answer the plot now works with the Z axis now being logged - see below. The data range for the Z axis is from ~0.6 - 5e-07 resulting in the smallest values being difficult to see at this scale (0,1,4) - are there any suggestions for trying a different type of log?enter image description here
import matplotlib
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sys
import csv
import bbox
csvFileName = sys.argv[0]
csvData = []
with open('parvalues.dat', 'r') as csvfile:
csvReader = csv.reader(csvfile, delimiter=',')
for csvRow in csvReader:
csvData.append(csvRow)
csvData = np.array(csvData)
csvData = csvData.astype(float)
X, Y, Z = csvData[:,0], csvData[:,1], csvData[:,2]
#change vmin and vmax values for colorbar range
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cb = ax.plot_trisurf*(X, Y, Z, cmap='coolwarm', alpha=0.75)
#cb = ax.plot_trisurf(X, Y, Z, cmap='coolwarm', alpha=0.75,
vmin=0, vmax=800)
ax.scatter(X, Y, Z, c='red', marker='o')
fig.colorbar(cb, shrink=0.5)
ax.set_title("First-year sea ice PAR")
ax.set_xlabel("SZA")
ax.set_ylabel("Ice thickness")
ax.set_zlabel("µmol m$^{-2}$ $^{s-1}$")
ax.view_init(azim=70, elev=30)
image_format = 'png' # e.g .png, .svg, etc.
image_name = 'test.eps'
tight_layout()
plt.show()
fig.savefig(image_name, format=image_format, dpi=1200)