使用python根据给定数据,绘制物流公司物流费用统计堆积面积图
时间: 2024-03-05 20:47:34 浏览: 174
好的,您需要先安装matplotlib库,可以使用以下命令进行安装:
```
pip install matplotlib
```
然后,您可以使用以下代码绘制物流公司物流费用统计堆积面积图:
```python
import matplotlib.pyplot as plt
# 物流公司列表
companies = ['顺丰', '圆通', '韵达', '中通', '申通']
# 物流费用数据,每个元素为一个列表,表示每个物流公司的费用统计
costs = [[300, 500, 700, 900, 1100],
[200, 400, 600, 800, 1000],
[100, 300, 500, 700, 900],
[400, 600, 800, 1000, 1200],
[500, 700, 900, 1100, 1300]]
# 绘制堆积面积图
plt.stackplot(range(1, 6), costs, labels=companies)
# 添加标题和坐标轴标签
plt.title('物流公司物流费用统计')
plt.xlabel('月份')
plt.ylabel('费用(元)')
# 添加图例
plt.legend(loc='upper left')
# 显示图形
plt.show()
```
运行上述代码,即可得到物流公司物流费用统计堆积面积图。您可以根据自己的数据进行修改。
相关问题
海拔地图python
### 使用 Python 创建或处理海拔地图
#### 安装必要的库
为了创建和处理海拔地图,通常需要安装一些特定的库。这些库可以帮助获取地理空间数据并将其可视化。
```bash
pip install geopandas folium rasterio matplotlib tianditu-python
```
#### 获取地形数据
可以利用 `tianditu-python` 库来访问天地图服务中的高程数据[^1]:
```python
from tianditu import TerrainService, get_elevation
service = TerrainService()
elevations = service.getElevation(lnglat_list=[(116.407396, 39.904211)], type='geoid')
print(elevations)
```
这段代码展示了如何通过给定经纬度坐标列表查询对应的海拔高度值。
#### 绘制海拔高度剖面图
对于基于GPS轨迹的数据集,可以通过Pandas DataFrame结构化存储位置信息及其相应的海拔数值,并借助Matplotlib或其他绘图工具生成直观的高度变化曲线图表[^2]:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def plot_altitude_profile(df):
fig, ax = plt.subplots(figsize=(8, 5))
df.plot(x="distance", y="altitude", marker='o', linestyle='-', color='blue', ax=ax)
ax.set_xlabel('Distance (km)')
ax.set_ylabel('Altitude (m)')
ax.grid(True)
plt.title('Altitude Profile Along Track')
data = {
'latitude': [39.904211],
'longitude': [116.407396],
'altitude': [get_elevation((116.407396, 39.904211))],
'distance': [0]
}
df = pd.DataFrame(data)
plot_altitude_profile(df)
plt.show()
```
此函数接受一个包含经度、纬度、距离以及对应海拔列名的DataFrame作为输入参数,并绘制出沿路径的距离-海拔关系折线图。
#### 可视化大面积区域内的海拔分布情况
当涉及到更大范围的地图展示时,可采用栅格图像形式表示不同地点的地貌特征。这里介绍一种方法是读取GeoTIFF文件(常见的数字高程模型DEM格式),并通过Folium库叠加到交互式的Web地图上显示出来[^3]:
```python
import folium
import rasterio
from rasterio.plot import show
with rasterio.open("path_to_dem_file.tif") as src:
elevation_data = src.read(1)
transform = src.transform
# Create a base map centered at specific coordinates.
map_center = [src.bounds.centroid.y, src.bounds.centroid.x]
m = folium.Map(location=map_center, zoom_start=10)
folium.raster_layers.ImageOverlay(
image=elevation_data,
bounds=[[src.bounds.bottom, src.bounds.left], [src.bounds.top, src.bounds.right]],
opacity=0.7,
).add_to(m)
m.save('dem_map.html') # Save the HTML file that contains an interactive web map with DEM overlay.
show(src) # Alternatively use Matplotlib's imshow function directly within Jupyter Notebook cells.
```
上述脚本实现了加载本地保存的一个GeoTIFF类型的DEM文件,并把它转换成适合于在线浏览的形式;最后还提供了两种不同的方式来进行查看效果对比。
借鉴求解圆周率计算的蒙特卡罗方法,计算 y = sin(x) 函数在[1.0, 1.0]区间内的面积,并绘制面积计算示意图,利用Python实现
蒙特卡洛方法是一种基于随机抽样的数值积分方法,它通过模拟大量随机点落在某个区域的情况来估算函数的定积分。对于计算y=sin(x)在[1.0, 1.0]区间下的面积,我们可以创建一个正方形区域,其边长等于2,然后统计落在这个区域内部且满足y=sin(x)的点的数量。
首先,我们需要导入必要的库,如numpy和matplotlib。接下来,我们将设置一个足够大的样本数,生成随机点并检查它们是否位于给定区域内和正弦曲线上。最后,我们应用几何比例来估计面积。
以下是Python代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义正弦函数
def f(x):
return np.sin(x)
# 定义评估区间和采样总数
a, b = 1.0, 1.0
n_points = 1000000
# 创建随机坐标
x_random = np.random.uniform(a, b, n_points)
y_random = f(x_random)
# 计算落在曲线下方的点的比例
points_below_curve = len(x_random[y_random <= 1])
# 计算面积
area_estimate = (b - a) * points_below_curve / n_points
# 绘制示意图
fig, ax = plt.subplots()
ax.plot(x_random, y_random, 'bo', alpha=0.5, markersize=1, label='Random Points')
ax.plot([a, b], [0, 0], 'k--', linewidth=1)
ax.plot([a, a], [-1, 1], 'k--', linewidth=1)
ax.plot([b, b], [-1, 1], 'k--', linewidth=1)
ax.fill_between([a, b], [-1, -1], color='gray', alpha=0.4, label='Area Estimate')
ax.set_xlim(a, b)
ax.set_ylim(-1.1, 1.1)
ax.legend()
plt.title(f"Estimating Area of y = sin(x) in [{a}, {b}] using Montecarlo method (Estimated Area: {area_estimate:.4f})")
plt.show()
阅读全文