добавление линий смешивания для всех давлений в skewT metpy

#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. да, я же говорил тебе, что вел себя глупо… Я так привык к спискам строк для запросов на извлечение компакт-дисков, что теперь даже не замечаю этого… Спасибо.