@@ -907,8 +907,8 class PlotterData(object): | |||
|
907 | 907 | Object to hold data to be plotted |
|
908 | 908 | ''' |
|
909 | 909 | |
|
910 |
MAXNUMX = |
|
|
911 |
MAXNUMY = |
|
|
910 | MAXNUMX = 1000 | |
|
911 | MAXNUMY = 1000 | |
|
912 | 912 | |
|
913 | 913 | def __init__(self, code, exp_code, localtime=True): |
|
914 | 914 | |
@@ -993,25 +993,28 class PlotterData(object): | |||
|
993 | 993 | |
|
994 | 994 | self.__heights = [H for tm in self.times] |
|
995 | 995 | |
|
996 | def jsonify(self, tm, plot_name, plot_type, decimate=False): | |
|
996 | def jsonify(self, tm, plot_name, plot_type, key=None, decimate=False): | |
|
997 | 997 | ''' |
|
998 | 998 | Convert data to json |
|
999 | 999 | ''' |
|
1000 | 1000 | |
|
1001 | if key is None: | |
|
1002 | key = self.key | |
|
1003 | ||
|
1001 | 1004 | meta = {} |
|
1002 | 1005 | meta['xrange'] = [] |
|
1003 | 1006 | dy = int(len(self.yrange)/self.MAXNUMY) + 1 |
|
1004 |
tmp = self.data[tm][ |
|
|
1007 | tmp = self.data[tm][key] | |
|
1005 | 1008 | shape = tmp.shape |
|
1006 | 1009 | if len(shape) == 2: |
|
1007 |
data = self.roundFloats(self.data[tm][ |
|
|
1010 | data = self.roundFloats(self.data[tm][key][::, ::dy].tolist()) | |
|
1008 | 1011 | elif len(shape) == 3: |
|
1009 |
dx = int(self.data[tm][ |
|
|
1012 | dx = int(self.data[tm][key].shape[1]/self.MAXNUMX) + 1 | |
|
1010 | 1013 | data = self.roundFloats( |
|
1011 |
self.data[tm][ |
|
|
1014 | self.data[tm][key][::, ::dx, ::dy].tolist()) | |
|
1012 | 1015 | meta['xrange'] = self.roundFloats(self.xrange[2][::dx].tolist()) |
|
1013 | 1016 | else: |
|
1014 |
data = self.roundFloats(self.data[tm][ |
|
|
1017 | data = self.roundFloats(self.data[tm][key].tolist()) | |
|
1015 | 1018 | |
|
1016 | 1019 | ret = { |
|
1017 | 1020 | 'plot': plot_name, |
@@ -1022,7 +1025,9 class PlotterData(object): | |||
|
1022 | 1025 | meta['type'] = plot_type |
|
1023 | 1026 | meta['interval'] = float(self.interval) |
|
1024 | 1027 | meta['localtime'] = self.localtime |
|
1025 | meta['yrange'] = self.roundFloats(self.yrange[::dy].tolist()) | |
|
1028 | #meta['yrange'] = self.roundFloats(self.yrange[::dy].tolist()) | |
|
1029 | meta['yrange'] = self.roundFloats(self.lat[::dy].tolist()) | |
|
1030 | meta['xrange'] = self.roundFloats(self.lon[::dy].tolist()) | |
|
1026 | 1031 | meta.update(self.meta) |
|
1027 | 1032 | ret['metadata'] = meta |
|
1028 | 1033 | return json.dumps(ret) |
@@ -1066,4 +1071,4 class PlotterData(object): | |||
|
1066 | 1071 | if isinstance(obj, list): |
|
1067 | 1072 | return list(map(PlotterData.roundFloats, obj)) |
|
1068 | 1073 | elif isinstance(obj, float): |
|
1069 |
return round(obj, |
|
|
1074 | return round(obj, 4) |
@@ -596,9 +596,9 class Plot(Operation): | |||
|
596 | 596 | if isinstance(value, (numpy.float32, numpy.float64)): |
|
597 | 597 | value = round(float(value), 2) |
|
598 | 598 | self.data.meta[attr] = value |
|
599 | if self.colormap == 'jet': | |
|
599 | if self.colormap == 'jet' or self.colormap == 'sophy_w': | |
|
600 | 600 | self.data.meta['colormap'] = 'Jet' |
|
601 |
elif ' |
|
|
601 | elif 'sophy_v' in self.colormap: | |
|
602 | 602 | self.data.meta['colormap'] = 'RdBu' |
|
603 | 603 | else: |
|
604 | 604 | self.data.meta['colormap'] = 'Viridis' |
@@ -611,7 +611,7 class Plot(Operation): | |||
|
611 | 611 | tm = self.sender_queue.popleft() |
|
612 | 612 | except IndexError: |
|
613 | 613 | break |
|
614 | msg = self.data.jsonify(tm, self.save_code, self.plot_type) | |
|
614 | msg = self.data.jsonify(tm, self.save_code, self.plot_type, key='var') | |
|
615 | 615 | self.socket.send_string(msg) |
|
616 | 616 | socks = dict(self.poll.poll(2000)) |
|
617 | 617 | if socks.get(self.socket) == zmq.POLLIN: |
@@ -6,8 +6,8 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter | |||
|
6 | 6 | from schainpy.model.graphics.jroplot_base import Plot, plt |
|
7 | 7 | from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot |
|
8 | 8 | from schainpy.utils import log |
|
9 | # libreria wradlib | |
|
10 |
|
|
|
9 | ||
|
10 | import wradlib.georef as georef | |
|
11 | 11 | |
|
12 | 12 | EARTH_RADIUS = 6.3710e3 |
|
13 | 13 | |
@@ -372,7 +372,7 class PolarMapPlot(Plot): | |||
|
372 | 372 | class WeatherParamsPlot(Plot): |
|
373 | 373 | #CODE = 'RHI' |
|
374 | 374 | #plot_name = 'RHI' |
|
375 |
|
|
|
375 | plot_type = 'scattermap' | |
|
376 | 376 | buffering = False |
|
377 | 377 | |
|
378 | 378 | def setup(self): |
@@ -418,10 +418,20 class WeatherParamsPlot(Plot): | |||
|
418 | 418 | |
|
419 | 419 | if 'pow' in self.attr_data[0].lower(): |
|
420 | 420 | # data['data'] = 10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)) |
|
421 |
|
|
|
421 | tmp = numpy.ma.masked_array(10*numpy.log10(getattr(dataOut, self.attr_data[0])/(factor)), mask=mask) | |
|
422 | 422 | else: |
|
423 |
|
|
|
424 |
# |
|
|
423 | tmp = numpy.ma.masked_array(getattr(dataOut, self.attr_data[0]), mask=mask) | |
|
424 | # tmp = getattr(dataOut, self.attr_data[0]) | |
|
425 | ||
|
426 | r = dataOut.heightList | |
|
427 | delta_height = r[1]-r[0] | |
|
428 | valid = numpy.where(r>=0)[0] | |
|
429 | data['r'] = numpy.arange(len(valid))*delta_height | |
|
430 | ||
|
431 | try: | |
|
432 | data['data'] = tmp[self.channels[0]][:,valid] | |
|
433 | except: | |
|
434 | data['data'] = tmp[0][:,valid] | |
|
425 | 435 | |
|
426 | 436 | if dataOut.mode_op == 'PPI': |
|
427 | 437 | self.CODE = 'PPI' |
@@ -430,25 +440,22 class WeatherParamsPlot(Plot): | |||
|
430 | 440 | self.CODE = 'RHI' |
|
431 | 441 | self.title = self.CODE |
|
432 | 442 | |
|
433 |
data['azi'] |
|
|
434 |
data['ele'] |
|
|
443 | data['azi'] = dataOut.data_azi | |
|
444 | data['ele'] = dataOut.data_ele | |
|
435 | 445 | data['mode_op'] = dataOut.mode_op |
|
436 | ||
|
446 | var = data['data'].flatten() | |
|
447 | r = numpy.tile(data['r'], data['data'].shape[0]).reshape(data['data'].shape)*1000 | |
|
448 | lla = georef.spherical_to_proj(r, data['azi'], data['ele'], (-75.295893, -12.040436, 3379.2147)) | |
|
449 | meta['lat'] = lla[:,:,1].flatten()[var.mask==False] | |
|
450 | meta['lon'] = lla[:,:,0].flatten()[var.mask==False] | |
|
451 | data['var'] = numpy.array([var[var.mask==False]]) | |
|
452 | ||
|
437 | 453 | return data, meta |
|
438 | 454 | |
|
439 | 455 | def plot(self): |
|
440 |
data |
|
|
441 | r = self.data.yrange | |
|
442 | delta_height = r[1]-r[0] | |
|
443 | r_mask = numpy.where(r>=0)[0] | |
|
444 | r = numpy.arange(len(r_mask))*delta_height | |
|
445 | self.y = 2*r | |
|
446 | ||
|
447 | try: | |
|
448 | z = data['data'][self.channels[0]][:,r_mask] | |
|
449 | except: | |
|
450 | z = data['data'][0][:,r_mask] | |
|
451 | ||
|
456 | data = self.data[-1] | |
|
457 | z = data['data'] | |
|
458 | r = data['r'] | |
|
452 | 459 | self.titles = [] |
|
453 | 460 | |
|
454 | 461 | self.ymax = self.ymax if self.ymax else numpy.nanmax(r) |
General Comments 0
You need to be logged in to leave comments.
Login now