import streamlit as st import pandas as pd import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D from datasets import load_dataset ds = load_dataset("Esmaeilkiani/CroploggingSugarcane") # عنوان برنامه st.title("داشبورد نمایش داده‌های مزرعه") # تبدیل ستون‌های عددی به float data['هفته'] = pd.to_numeric(data['هفته'], errors='coerce') data['ارتفاع'] = pd.to_numeric(data['ارتفاع'], errors='coerce') data['رشد'] = pd.to_numeric(data['رشد'], errors='coerce') # حذف داده‌های نامعتبر data.dropna(subset=['هفته', 'ارتفاع', 'رشد'], inplace=True) # ایجاد پنل کناری برای انتخاب مزرعه with st.sidebar: st.header("انتخاب مزرعه") # ایجاد لیست منحصر به فرد از مزارع farms = data['مزرعه'].unique() # ایجاد منوی کشویی برای انتخاب مزرعه selected_farm = st.selectbox("مزرعه مورد نظر را انتخاب کنید", farms) # ایجاد دکمه جستجو search_farm = st.text_input("نام مزرعه مورد نظر را بنویسید") if search_farm: selected_farm = search_farm # فیلتر کردن داده‌ها بر اساس مزرعه انتخاب شده farm_data = data[data['مزرعه'] == selected_farm] if not farm_data.empty: # استخراج داده‌های هفته و ارتفاع weeks = sorted(farm_data['هفته'].unique()) heights = sorted(farm_data['ارتفاع'].unique()) # ایجاد شبکه برای موقعیت‌ها و هفته‌ها X, Y = np.meshgrid(weeks, heights) # ایجاد داده‌های ارتفاع Z = np.zeros_like(X, dtype=float) for i, week in enumerate(weeks): for j, height in enumerate(heights): value = farm_data[(farm_data['هفته'] == week) & (farm_data['ارتفاع'] == height)]['رشد'] if not value.empty: Z[j, i] = value.values[0] else: Z[j, i] = 0 # مقدار پیش‌فرض در صورت نبود داده # رسم نمودار سه‌بعدی fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(111, projection='3d') surf = ax.plot_surface(X, Y, Z, cmap='viridis') # تنظیم برچسب‌های محورها ax.set_xlabel('Weeks') ax.set_ylabel('Height') ax.set_zlabel('Growth') ax.set_title('3D Surface Plot of Field Height Over Weeks') # نمایش نمودار st.pyplot(fig) else: st.write("مزرعه‌ای با این نام پیدا نشد.")