#python #metpy
#питон #метпи
Вопрос:
Я могу построить стандартную диаграмму перекоса с линиями смешения до значения по умолчанию p=600hPa, используя вызов по умолчанию plot_mixing_lines()
, но я хотел расширить их до верхней тропосферы. Я попытался сделать следующее:
import matplotlib.pyplot as plt from metpy.plots import SkewT from metpy.units import units fig=plt.figure(figsize=(9, 9)) skew=SkewT(fig) skew.plot_moist_adiabats() plevs=[ '1', '2', '3', '5', '7', '10', '20', '30', '50', '70', '100', '125', '150', '175', '200', '225', '250', '300', '350', '400', '450', '500', '550', '600', '650', '700', '750', '775', '800', '825', '850', '875', '900', '925', '950', '975', '1000'] plevs = units.Quantity(plevs,"hPa") skew.plot_mixing_lines(pressure=plevs)
но это заканчивается ошибкой:
~/Library/Python/3.9/lib/python/site-packages/pint/quantity.py in _mul_div(self, other, magnitude_op, units_op) 1285 return NotImplemented 1286 -gt; 1287 magnitude = magnitude_op(self._magnitude, other_magnitude) 1288 units = units_op(self._units, self.UnitsContainer()) 1289 UFuncTypeError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('lt;U4'), dtype('float64')) -gt; None
Во всех примерах использования, которые я нашел в Интернете, либо не было линий смешивания, либо использовалось значение по умолчанию. Я делаю что-то глупое?
Теперь на metpy 1.1, python 3.9.9 на Clang 13.0.0 и откатил matplotllib до 3.4
Ответ №1:
Проблема здесь в том, что все значения в plevs
являются строками, а не значениями. Я исправил это с помощью a plevs = list(map(int, plevs))
, но вам, возможно, будет проще попробовать:
import numpy as np plevs = np.logspace(0, 3, 100)
Что даст вам 100 очков, логарифмически распределенных между 1 (10^0) и 1000 (10^3).
Комментарии:
1. да, я же говорил тебе, что вел себя глупо… Я так привык к спискам строк для запросов на извлечение компакт-дисков, что теперь даже не замечаю этого… Спасибо.