3D Scatter

Soil NPK Composition Analysis

Agricultural soil analysis showing nitrogen, phosphorus, potassium levels colored by pH.

Output
Soil NPK Composition Analysis
Python
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(777)

# Soil composition data
n_samples = 150

nitrogen = np.random.uniform(0.1, 2.5, n_samples)  # %
phosphorus = np.random.uniform(0.01, 0.3, n_samples)  # %
potassium = np.random.uniform(0.5, 3, n_samples)  # %

# pH affects nutrient availability
ph = 5.5 + nitrogen * 0.5 + np.random.normal(0, 0.3, n_samples)

# Color by pH (acidic=orange, neutral=cyan, alkaline=purple)
colors = []
for p in ph:
    if p < 6:
        colors.append('#F54927')  # Acidic
    elif p < 7.5:
        colors.append('#27F5B0')  # Neutral
    else:
        colors.append('#4927F5')  # Alkaline

fig = plt.figure(figsize=(10, 8), facecolor='#ffffff')
ax = fig.add_subplot(111, projection='3d', facecolor='#ffffff')

ax.scatter(nitrogen, phosphorus, potassium, c=colors, s=60, 
           alpha=0.7, edgecolors='#374151', linewidths=0.3)

ax.set_xlabel('Nitrogen (%)', color='#1f2937', fontsize=10)
ax.set_ylabel('Phosphorus (%)', color='#1f2937', fontsize=10)
ax.set_zlabel('Potassium (%)', color='#1f2937', fontsize=10)
ax.set_title('Soil NPK Composition Analysis', color='#1f2937', fontsize=14, fontweight='bold', pad=20)

ax.tick_params(colors='#6b7280', labelsize=8)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False
ax.xaxis.pane.set_edgecolor('#e5e7eb')
ax.yaxis.pane.set_edgecolor('#e5e7eb')
ax.zaxis.pane.set_edgecolor('#e5e7eb')

ax.view_init(elev=25, azim=45)
plt.tight_layout()
plt.show()
Library

Matplotlib

Category

3D Charts

Did this help you?

Support PyLucid to keep it free & growing

Support