Python visual on the Service doesn't render as in PBI Desktop
The error message I get on the Service is:
"It is not currently possible to manually set the aspect on 3D axes"
But it rendered normally on Desktop (see below).
The method causing the issue is set_x/y/z/ticks from Matplotlib : ax.set_yticks(np.arange(0, 108, step=25))
Is there any timeline for fixing this issue or workaround? I do need to plot it as a rectangle. A square won't look good.
3 Comments
- AnonymousNot applicable
Hi J_Castro
Is this the first time you've uploaded a visual of this type? Have you had similar problems before? What is your data source? What is your Desktop version ?
Best Regards,
Community Support Team _ Ailsa Tao - J_CastroFrequent Visitor
Hello Alisa
Anonymous
That's the first time I use a Python visual in a professional setting.
Currently, I am pulling data from an Excel file.
PBI Desktop version: 2.121.942.0 64-bit (September 2023)
Please see below that if I comment the lines regarding axis formatting, it works.
Please find the viz code below:
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script: # dataset = pandas.DataFrame(Diam (IN), X, Y, Z, Width (IN), Railcar) # dataset = dataset.drop_duplicates() # Paste or type your script code here: df = dataset import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.path import Path import numpy as np def plot_cylinder(x, y, z, r, h): if y == 0: y = r elif y > 0: y = y + r + 5 #color the cylinder if z == 82: cylinder_color = 'brown' elif z == 68: cylinder_color = 'gray' elif z == 70: cylinder_color = 'blue' elif z == 80: cylinder_color = 'yellow' elif z == 82: cylinder_color = 'purple' elif z == 85: cylinder_color = 'yellow' elif z == 90: cylinder_color = 'red' elif z == 102: cylinder_color = 'green' def data_for_cylinder_along_z(center_x,center_y,radius,height_z): z = np.linspace(0, height_z, 50) theta = np.linspace(0, 2*np.pi, 50) theta_grid, z_grid=np.meshgrid(theta, z + h) x_grid = radius*np.cos(theta_grid) + center_x y_grid = radius*np.sin(theta_grid) + center_y return x_grid,y_grid,z_grid Xc,Yc,Zc = data_for_cylinder_along_z(x+r, y, r, z) ax.plot_surface(Xc,Yc,Zc, alpha=0.95, color= cylinder_color, #cmap='Set1', rstride=3, cstride=3 ) fig = plt.figure(figsize=(7,4)) ax = Axes3D(fig) fig.add_axes(ax) #ax.set_xlim3d(0, 600) #ax.set_ylim3d(0, 108) #ax.set_zlim3d(0, 154) #ax.set_zticks(np.arange(0, 154, step=10)) #ax.zaxis.set_tick_params(labelsize=5) #ax.set_yticks(np.arange(0, 108, step=25)) #ax.yaxis.set_tick_params(labelsize=5) #ax.set_xticks(np.arange(0, 600, step=25)) #ax.xaxis.set_tick_params(labelsize=5) #ax.set_aspect('equal', adjustable='box') for i, row in df.iterrows(): plot_cylinder( int(row['X']), int(row['Z']), int(row['Width (IN)']), int(row['Diam (IN)']) / 2, int(row['Y']) ) ax.view_init(30, 40) plt.show() - J_CastroFrequent Visitor
Anonymous , do you need any extra information to investigate it?