如何利用数组数值绘制箱线图?Python实操问题求助
Hey there! Let's work through this Python practical problem step by step. I see you're trying to calculate key stats for your valid_opening_duration_list array and plot a boxplot, but hitting snags with data formatting. Let's break this down.
Your Task Recap
You need to:
- Find the minimum, maximum, and median values of
valid_opening_duration_list - Use these stats to create a boxplot
Your Partial Code Snippet
import statistics import numpy as np import matplotlib.pyplot as plt print("Maximum Opening Duration is", max(valid_opening_duration_list)) print("Minimun Opening Duration is", min(valid_opening_duration_list)) # (Your code cuts off here, but I can guess you're stuck on formatting for the boxplot)
Step 1: Finish Calculating the Stats
First, let's wrap up the statistical calculations. Both Python's built-in functions and NumPy work here—pick whichever fits your data type:
Option 1: Using Python's Built-ins (for standard lists)
# Calculate stats max_duration = max(valid_opening_duration_list) min_duration = min(valid_opening_duration_list) median_duration = statistics.median(valid_opening_duration_list) # Print results (using f-strings for cleaner output) print(f"Maximum Opening Duration is {max_duration}") print(f"Minimum Opening Duration is {min_duration}") print(f"Median Opening Duration is {median_duration}")
Option 2: Using NumPy (for larger datasets or NumPy arrays)
# Convert your list to a NumPy array if it isn't already duration_array = np.array(valid_opening_duration_list) # Calculate stats max_duration = np.max(duration_array) min_duration = np.min(duration_array) median_duration = np.median(duration_array) # Print results print(f"Maximum Opening Duration is {max_duration}") print(f"Minimum Opening Duration is {min_duration}") print(f"Median Opening Duration is {median_duration}")
Step 2: Fix Boxplot Formatting & Plot
Matplotlib's plt.boxplot() is pretty flexible—it accepts both Python lists and NumPy arrays directly. The most common issues here are non-numeric values in your array or data stored in a non-iterable format. Here's a complete, working boxplot code block that includes your stats:
import statistics import numpy as np import matplotlib.pyplot as plt # Example data (replace with your actual valid_opening_duration_list) valid_opening_duration_list = [15, 22, 18, 30, 25, 12, 28, 20] # Calculate stats (using built-ins here) max_duration = max(valid_opening_duration_list) min_duration = min(valid_opening_duration_list) median_duration = statistics.median(valid_opening_duration_list) # Print stats print(f"Maximum Opening Duration is {max_duration}") print(f"Minimum Opening Duration is {min_duration}") print(f"Median Opening Duration is {median_duration}") # Create boxplot plt.boxplot(valid_opening_duration_list) # Add labels and title for clarity plt.title("Distribution of Opening Durations") plt.ylabel("Duration Value") # Optional: Annotate the stats directly on the plot plt.text(1.1, max_duration, f"Max: {max_duration}", ha='left', va='center') plt.text(1.1, min_duration, f"Min: {min_duration}", ha='left', va='center') plt.text(1.1, median_duration, f"Median: {median_duration}", ha='left', va='center') # Show the plot plt.show()
Troubleshooting Common Format Issues
- If your data is a Pandas Series: Convert it to a list with
valid_opening_duration_list.tolist()or a NumPy array withvalid_opening_duration_list.values - If there are non-numeric entries: Filter them out first with a list comprehension:
cleaned_list = [x for x in valid_opening_duration_list if isinstance(x, (int, float))] - If the array is empty: Double-check that your data is loading correctly—empty arrays will throw errors for
min(),max(), andmedian().
That should get you past the formatting hurdle and give you a working boxplot with all the required stats!
内容的提问来源于stack exchange,提问作者user9552634

