mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Support hiding rows and columns with no correlations
This commit is contained in:
parent
e6c2b693ef
commit
56addaf55d
@ -141,6 +141,13 @@ RimCorrelationMatrixPlot::RimCorrelationMatrixPlot()
|
|||||||
CAF_PDM_InitField( &m_showAbsoluteValues, "CorrelationAbsValues", false, "Show Absolute Values", "", "", "" );
|
CAF_PDM_InitField( &m_showAbsoluteValues, "CorrelationAbsValues", false, "Show Absolute Values", "", "", "" );
|
||||||
CAF_PDM_InitField( &m_sortByValues, "CorrelationSorting", true, "Sort Matrix by Values", "", "", "" );
|
CAF_PDM_InitField( &m_sortByValues, "CorrelationSorting", true, "Sort Matrix by Values", "", "", "" );
|
||||||
CAF_PDM_InitField( &m_sortByAbsoluteValues, "CorrelationAbsSorting", true, "Sort by Absolute Values", "", "", "" );
|
CAF_PDM_InitField( &m_sortByAbsoluteValues, "CorrelationAbsSorting", true, "Sort by Absolute Values", "", "", "" );
|
||||||
|
CAF_PDM_InitField( &m_removeRowsAndColumnsWithZeroCorrelation,
|
||||||
|
"RemoveZeroCorrelation",
|
||||||
|
false,
|
||||||
|
"Remove rows/columns with zero correlation",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"" );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_legendConfig, "LegendConfig", "", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_legendConfig, "LegendConfig", "", "", "", "" );
|
||||||
m_legendConfig = new RimRegularLegendConfig();
|
m_legendConfig = new RimRegularLegendConfig();
|
||||||
@ -191,8 +198,8 @@ void RimCorrelationMatrixPlot::fieldChangedByUi( const caf::PdmFieldHandle* chan
|
|||||||
const QVariant& newValue )
|
const QVariant& newValue )
|
||||||
{
|
{
|
||||||
RimAbstractCorrelationPlot::fieldChangedByUi( changedField, oldValue, newValue );
|
RimAbstractCorrelationPlot::fieldChangedByUi( changedField, oldValue, newValue );
|
||||||
if ( changedField == &m_correlationFactor || changedField == &m_showAbsoluteValues ||
|
if ( changedField == &m_correlationFactor || changedField == &m_showAbsoluteValues || changedField == &m_sortByValues ||
|
||||||
changedField == &m_sortByValues || changedField == &m_sortByAbsoluteValues )
|
changedField == &m_sortByAbsoluteValues || changedField == &m_removeRowsAndColumnsWithZeroCorrelation )
|
||||||
{
|
{
|
||||||
this->updateLegend();
|
this->updateLegend();
|
||||||
this->loadDataAndUpdate();
|
this->loadDataAndUpdate();
|
||||||
@ -213,6 +220,7 @@ void RimCorrelationMatrixPlot::defineUiOrdering( QString uiConfigName, caf::PdmU
|
|||||||
{
|
{
|
||||||
correlationGroup->add( &m_sortByAbsoluteValues );
|
correlationGroup->add( &m_sortByAbsoluteValues );
|
||||||
}
|
}
|
||||||
|
correlationGroup->add( &m_removeRowsAndColumnsWithZeroCorrelation );
|
||||||
|
|
||||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
||||||
m_selectedVarsUiField = selectedVarsText();
|
m_selectedVarsUiField = selectedVarsText();
|
||||||
@ -344,12 +352,14 @@ void RimCorrelationMatrixPlot::updateAxes()
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename KeyType, typename ValueType>
|
template <typename KeyType, typename ValueType>
|
||||||
void eraseInvalidEntries( std::vector<CorrelationMatrixRowOrColumn<KeyType, ValueType>>& matrix )
|
void eraseInvalidEntries( std::vector<CorrelationMatrixRowOrColumn<KeyType, ValueType>>& matrix, bool zeroIsInvalid )
|
||||||
{
|
{
|
||||||
matrix.erase( std::remove_if( matrix.begin(),
|
matrix.erase( std::remove_if( matrix.begin(),
|
||||||
matrix.end(),
|
matrix.end(),
|
||||||
[]( const CorrelationMatrixRowOrColumn<KeyType, ValueType>& entry ) {
|
[=]( const CorrelationMatrixRowOrColumn<KeyType, ValueType>& entry ) {
|
||||||
return !RiaCurveDataTools::isValidValue( entry.m_correlationSum, false );
|
bool isValid = RiaCurveDataTools::isValidValue( entry.m_correlationSum, false );
|
||||||
|
if ( zeroIsInvalid ) isValid = isValid && entry.m_correlationAbsSum > 1.0e-8;
|
||||||
|
return !isValid;
|
||||||
} ),
|
} ),
|
||||||
matrix.end() );
|
matrix.end() );
|
||||||
}
|
}
|
||||||
@ -465,7 +475,12 @@ void RimCorrelationMatrixPlot::createMatrix()
|
|||||||
correlation = RiaStatisticsTools::spearmanCorrelation( parameterValues, caseValuesAtTimestep );
|
correlation = RiaStatisticsTools::spearmanCorrelation( parameterValues, caseValuesAtTimestep );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( RiaCurveDataTools::isValidValue( correlation, false ) )
|
bool validResult = RiaCurveDataTools::isValidValue( correlation, false );
|
||||||
|
if ( m_removeRowsAndColumnsWithZeroCorrelation() )
|
||||||
|
{
|
||||||
|
validResult = validResult && std::abs( correlation ) > 1.0e-8;
|
||||||
|
}
|
||||||
|
if ( validResult )
|
||||||
{
|
{
|
||||||
if ( m_showAbsoluteValues() ) correlation = std::abs( correlation );
|
if ( m_showAbsoluteValues() ) correlation = std::abs( correlation );
|
||||||
anyValidResults = true;
|
anyValidResults = true;
|
||||||
@ -481,12 +496,12 @@ void RimCorrelationMatrixPlot::createMatrix()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eraseInvalidEntries( correlationMatrixColumns );
|
eraseInvalidEntries( correlationMatrixColumns, m_removeRowsAndColumnsWithZeroCorrelation() );
|
||||||
if ( m_sortByValues() ) sortEntries( correlationMatrixColumns, m_sortByAbsoluteValues() || m_showAbsoluteValues() );
|
if ( m_sortByValues() ) sortEntries( correlationMatrixColumns, m_sortByAbsoluteValues() || m_showAbsoluteValues() );
|
||||||
|
|
||||||
auto correlationMatrixRows = transpose( correlationMatrixColumns );
|
auto correlationMatrixRows = transpose( correlationMatrixColumns );
|
||||||
|
|
||||||
eraseInvalidEntries( correlationMatrixRows );
|
eraseInvalidEntries( correlationMatrixRows, m_removeRowsAndColumnsWithZeroCorrelation() );
|
||||||
if ( m_sortByValues() ) sortEntries( correlationMatrixRows, m_sortByAbsoluteValues() || m_showAbsoluteValues() );
|
if ( m_sortByValues() ) sortEntries( correlationMatrixRows, m_sortByAbsoluteValues() || m_showAbsoluteValues() );
|
||||||
|
|
||||||
for ( size_t rowIdx = 0u; rowIdx < correlationMatrixRows.size(); ++rowIdx )
|
for ( size_t rowIdx = 0u; rowIdx < correlationMatrixRows.size(); ++rowIdx )
|
||||||
|
@ -78,6 +78,7 @@ private:
|
|||||||
caf::PdmField<bool> m_showAbsoluteValues;
|
caf::PdmField<bool> m_showAbsoluteValues;
|
||||||
caf::PdmField<bool> m_sortByValues;
|
caf::PdmField<bool> m_sortByValues;
|
||||||
caf::PdmField<bool> m_sortByAbsoluteValues;
|
caf::PdmField<bool> m_sortByAbsoluteValues;
|
||||||
|
caf::PdmField<bool> m_removeRowsAndColumnsWithZeroCorrelation;
|
||||||
|
|
||||||
caf::PdmChildField<RimRegularLegendConfig*> m_legendConfig;
|
caf::PdmChildField<RimRegularLegendConfig*> m_legendConfig;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user